我使用Spring Boot创建REST Web服务。 我想知道在控制器中处理异常的更好的方法是什么。我看过其他问题,但没有找到答案。
我的控制器:
@GetMapping
public ResponseEntity<?> saveMyUser(){
MyUser myUser = new MyUser(“Anna”);
//throws SQLException
MyUserDetails userDetails = userService.saveMyUser(myUser);
//if successful
return ResponseBody.ok(userDetails);
}
UserService的saveMyUser()方法:
public MyUserDetails saveUser(MyUser) throws SQLException {...}
所以到目前为止,我至少有两个简单的选择:
向方法签名添加异常。 在这里,我可能依靠Spring Boot将有关异常和状态代码的所有信息传递给客户端。但是不知道这是否是一种可靠的方法。
围绕try / catch并手动传递有关异常的所有信息。
什么是更好的简单方法?
答案 0 :(得分:2)
您可以创建带有@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");
}
}
此外,您可以扩展ResponseEntityExceptionHandler并覆盖从异常到HTTP响应的映射的默认行为。
另外,请看一下this,它为您的案件提供了非常有用的信息。