Mr.*_*ong 4 java spring java-8 spring-data-jpa spring-boot
在spring boot应用程序中,我有一个端点,如果存在,该端点将返回带有对象的HTTP 200响应,否则,将返回HTTP 404响应。使用spring-boot-starter-parent 1.5.7我曾经这样做过:
@Autowired private GroceryRepository groceryRepository;
@RequestMapping(value = "/get/{id}", method = RequestMethod.GET, produces = "application/json;charset=UTF-8")
public ResponseEntity<Object> get(@PathVariable final Integer id) {
final Grocery grocery = groceryRepository.findOne(id);
if (null == grocery) {
return ResponseEntity
.status(HttpStatus.NOT_FOUND)
.body(MessageUtil.parse(MSG_404_GROCERY, id + ""));
}
return ResponseEntity.ok(grocery);
}
GroceryRepository extends JpaRepository<Grocery, Integer>
Run Code Online (Sandbox Code Playgroud)
在spring-boot-starter-parent 2.0.0中,findOne()已从JpaRepository中消失,并findById()返回Optional。我在如何“移植”上面的代码上有些挣扎。由于它具有意外的返回类型,因此不会构建以下代码:
groceryRepository.findById(id).ifPresent(grocery -> {
return ResponseEntity.ok(grocery);
});
Run Code Online (Sandbox Code Playgroud)
有人可以告诉我返回正确响应的正确方法是什么?
谢谢你的帮助!
ifPresent具有void返回类型,因此return ResponseEntity.ok(grocery);无法像您已经看到的那样执行。
就是说,Optional有一个isPresent()方法,您可以使用:
Optional<Grocery> groceryOptional = groceryRepository.findById(id);
if(groceryOptional.isPresent()){
return ResponseEntity.ok(groceryOptional.get());
}else {
return ResponseEntity
.status(HttpStatus.NOT_FOUND)
.body(MessageUtil.parse(MSG_404_GROCERY, id + ""));
}
Run Code Online (Sandbox Code Playgroud)
另一种方法是:
Optional<Grocery> groceryOptional = groceryRepository.findById(id);
return groceryOptional.map(e -> ResponseEntity.ok(e))
.orElse(ResponseEntity
.status(HttpStatus.NOT_FOUND)
.body(MessageUtil.parse(MSG_404_GROCERY, id + "")));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2643 次 |
| 最近记录: |