我正在使用springmvc和一个关系数据库。spring写入的其中一个表具有一个惟一性约束,该约束按预期工作。
现在,如果一个请求违反了这个约束,那么异常 org.springframework.dao.DuplicateKeyException
抛出,并返回http 500响应(内部服务器错误),但实际上系统没有问题,只是用户的请求有问题。
捕捉异常并返回HTTP400(错误请求)的最自然的方法是什么?我真的可以这样抓住它:
@RequestMapping(value = "/", method = RequestMethod.POST)
public ResponseEntity<BaseMaterial> insert(@RequestBody BaseMaterial baseMaterial) {
try {
baseMaterial.setId(UUID.randomUUID());
baseMaterialService.insert(baseMaterial);
return ResponseEntity.ok(baseMaterial);
} catch (DuplicateKeyException e) {
return ResponseEntity.badRequest().build();
}
}
但是我必须对我的每个端点都这样做。我也更喜欢只使用pojo而不使用 ResponseEntity
Package 器。
谢谢!
2条答案
按热度按时间8fq7wneg1#
或者可能是系统/服务器的问题。我想你应该在插入之前检查一下是否有重复的。检查是否已经存在具有给定唯一字段的行,如果为true,则抛出异常。
vpfxa7rd2#
我很抱歉回答了我自己的问题,但是我在spring的博客上找到了我想要的东西。
在控制器类中,创建一个方法,该方法将在抛出所需异常时运行,并使用
ExceptionHandler
以及ResponseStatus
:就这样。没有其他变化!