首页 > 解决方案 > 如何在Java的条件语句范围内返回对象?

问题描述

我正在学习java spring。我必须得到一个用户,然后将其保存Foo到数据库中。用户对象是可选的,所以我必须把新的 Foo 放进去,ifPresent然后我怎么能返回结果,而我不能let像 javascript 一样使用呢?

  @PostMapping("/foo")
  public ResponseEntity<Foo> createFoo(@Valid @RequestBody Checkout checkout) throws URISyntaxException {
    Optional<User> _user = userRepository.findById(userId);
    _user.ifPresent(
      user-> 
        Foo _foo = checkout.getFoo();
        _foo.setUser(user);
        Foo foo = checkoutService.saveFoo(_foo );
      }
    );

    return ResponseEntity
      .created(new URI("/api/foo/" + foo .getId()))
      .headers(HeaderUtil.createEntityCreationAlert(applicationName, true, ENTITY_NAME, result.getId().toString()))
      .body(foo );```

标签: javaspringspring-bootspring-mvc

解决方案


你可以这样做:

 @PostMapping("/foo")
  public ResponseEntity<Foo> createFoo(@Valid @RequestBody Checkout checkout) throws URISyntaxException {
    Optional<User> _user = userRepository.findById(userId);
    Foo foo = _user.map(user -> {
        Foo _foo = checkout.getFoo();
        _foo.setUser(user);
        return checkoutService.saveFoo(_foo);
    }).orElse(null);

    return ResponseEntity
      .created(new URI("/api/foo/" + foo .getId()))
      .headers(HeaderUtil.createEntityCreationAlert(applicationName, true, ENTITY_NAME, result.getId().toString()))
      .body(foo );
 }

map 允许返回另一种类型的对象,在这种情况下,我们返回checkoutService.saveFoo(_foo) 的返回值;我们将它存储在 foo 变量中,如果 userRepository.findById(userId) 返回 null,您可以使用 .orElse() 作为注释 @QBrute。

    Foo foo = _user.map(user -> {
        Foo _foo = checkout.getFoo();
        _foo.setUser(user);
        return checkoutService.saveFoo(_foo);
    }).orElse(<default value>);

推荐阅读