在Spring Boot中的rest控制器中处理异常

时间:2019-05-23 08:29:48

标签: java spring rest spring-boot exception

我使用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 {...}

所以到目前为止,我至少有两个简单的选择:

  1. 向方法签名添加异常。 在这里,我可能依靠Spring Boot将有关异常和状态代码的所有信息传递给客户端。但是不知道这是否是一种可靠的方法。

  2. 围绕try / catch并手动传递有关异常的所有信息。

什么是更好的简单方法?

1 个答案:

答案 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,它为您的案件提供了非常有用的信息。