Kir*_* Ch 0 java rest spring exception spring-boot
我使用 Spring Boot 创建 REST Web 服务。\n我想知道处理控制器中的异常的更好方法是什么。我看过其他问题,但没有\xe2\x80\x99t 找到答案。
\n\n我的控制器:
\n\n@GetMapping\npublic ResponseEntity<?> saveMyUser(){\n MyUser myUser = new MyUser(\xe2\x80\x9cAnna\xe2\x80\x9d);\n\n //throws SQLException\n MyUserDetails userDetails = userService.saveMyUser(myUser);\n\n //if successful\n return ResponseBody.ok(userDetails);\n}\nRun Code Online (Sandbox Code Playgroud)\n\nUserService 的 saveMyUser() 方法:
\n\npublic MyUserDetails saveUser(MyUser) throws SQLException {...}\nRun Code Online (Sandbox Code Playgroud)\n\n所以此时我至少有两个简单的选择:
\n\n为方法签名添加异常。\n这里我可能依赖 Spring Boot 将有关异常和状态代码的所有信息传递给客户端。但不知道这是否是一个可靠的方法。
用 try/catch 包围并手动传递有关异常的所有信息。
有什么更好简单的方法?
\n您可以使用注释创建一个附加类@ControllerAdivce,稍后您将能够为每个异常编写自定义响应逻辑,例如:
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler({SQLException.class})
public ResponseEntity<Object> sqlError(Exception ex) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Some SQL exception occured");
}
}
Run Code Online (Sandbox Code Playgroud)
此外,您还可以扩展ResponseEntityExceptionHandler并覆盖从异常映射到 HTTP 响应的默认行为。
另外,看看这个,它包含对您的案例非常有用的信息。