java—发生特定异常时,如何返回http 400响应?

hgtggwj0  于 2021-07-09  发布在  Java
关注(0)|答案(2)|浏览(457)

我正在使用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 器。
谢谢!

8fq7wneg

8fq7wneg1#

或者可能是系统/服务器的问题。我想你应该在插入之前检查一下是否有重复的。检查是否已经存在具有给定唯一字段的行,如果为true,则抛出异常。

vpfxa7rd

vpfxa7rd2#

我很抱歉回答了我自己的问题,但是我在spring的博客上找到了我想要的东西。
在控制器类中,创建一个方法,该方法将在抛出所需异常时运行,并使用 ExceptionHandler 以及 ResponseStatus :

@ExceptionHandler(DuplicateKeyException.class)
@ResponseStatus(value = HttpStatus.CONFLICT, reason = "Data integrity violation") // 409
public void conflict() {
    // code goes here
}

就这样。没有其他变化!

相关问题