【发布时间】:2019-07-04 08:28:30
【问题描述】:
我正在尝试将值分配给一个 id 不存在的带有 put 控制器。通常它应该返回 404 但它返回 500。如何转换为 404?我尝试使用 if else 但这不起作用。
@PutMapping("/api/cricketer/{id}")
public ResponseEntity<Cricketer> updateCricketer(@PathVariable("id") Long id, @RequestBody @Valid Cricketer cricketer) {
Cricketer cCricketer=cricketerService.findById(id);
cCricketer.setId(id);
cCricketer.setCountry(cricketer.getCountry());
cCricketer.setName(cricketer.getName());
cCricketer.setHighestScore(cricketer.getHighestScore());
cricketerRepository.save(cCricketer);
if (cCricketer.getId()!=null){
return new ResponseEntity<Cricketer>(cCricketer,HttpStatus.OK);
}
else {
return new ResponseEntity<>(null, HttpStatus.NOT_FOUND);
}
}
【问题讨论】:
-
您的标题包含“异常处理”,但我在您的代码中看不到任何异常处理。你知道异常是如何处理的吗?
-
你可能会遇到一些异常......检查它是什么,以及你是否需要捕捉它
-
如果找不到
id,它将抛出500,像这样使用try{Cricketer cCricketer=cricketerService.findById(id);}catch(Exception e){ return new ResponseEntity<>(null, HttpStatus.NOT_FOUND);}(不是一个好的解决方案) -
我认为你永远不会达到你的
else声明。如果你的cricketerService.findById在找不到Cricketer的情况下抛出异常,那么你就不会命中它。如果同样的方法返回null,你会得到一个NullPointerException并且不会命中它。如果它返回 someCricketer,那么你在下一行代码中设置 id,所以cCricketer.getId()将 not 是null并且你不会打它。 -
@Kris:这不是真的...
404经常用于表示“找不到资源”,在这种情况下资源是Cricketer。
标签: java spring-boot validation http-status-codes