java - 如何在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 );```
解决方案
你可以这样做:
@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>);
推荐阅读
- excel - 具有多个 if 或的公式
- android - XML 数据绑定过多
- android - java.lang.IllegalStateException:必须在使用 singleton() 之前初始化 Fabric
- python - 使用 tensorflow 对象检测 api 时所有图像是否必须具有相同的大小?
- html - 如何让 div 在 Bootstrap 中填充其父列的整个高度
- c# - 使用自创证书的 WCF SecurityTokenValidationException
- android - 使用 Post 进行改造
- mysql - AWS codepipeline 运行 mysql 导入脚本来播种 RDS 实例
- javascript - Node.js 的弃用警告 - (不推荐使用全局)但未提及“全局”
- powershell - Powershell - 简化的日志记录 - 这是合法的吗?