Spring:RestController 和 Controller 的不同异常处理程序
在春季,您可以通过@ControllerAdvice和@ExceptionHandler注释来设置“全局”异常处理程序。我正在尝试利用此机制来拥有两个全局异常处理程序:
-
RestControllerExceptionHandler
- 它应该将错误响应作为json返回任何带有注释的控制器@RestController
-
ControllerExceptionHandler
- 应将错误消息打印到任何其他控制器的屏幕上(标有@Controller
)
问题是,当我声明这两个异常处理程序时,spring总是使用 和 从不来处理异常。ControllerExceptionHandler
RestControllerExceptionHandler
如何使它工作?BTW:我试图使用@Order注释,但这似乎不起作用。
以下是我的异常处理程序:
// should handle all exception for classes annotated with
@ControllerAdvice(annotations = RestController.class)
public class RestControllerExceptionHandler {
@ExceptionHandler(Exception.class)
public ResponseEntity<ErrorResponse> handleUnexpectedException(Exception e) {
// below object should be serialized to json
ErrorResponse errorResponse = new ErrorResponse("asdasd");
return new ResponseEntity<ErrorResponse>(errorResponse, HttpStatus.INTERNAL_SERVER_ERROR);
}
// should handle exceptions for all the other controllers
@ControllerAdvice(annotations = Controller.class)
public class ControllerExceptionHandler {
@ExceptionHandler(Exception.class)
public ResponseEntity<String> handleUnexpectedException(Exception e) {
return new ResponseEntity<String>("Unexpected exception, HttpStatus.INTERNAL_SERVER_ERROR);
}
}
}
当我删除比被春天正确调用时(仅适用于标有)....但是当我添加比所有通过.为什么?ControllerExceptionHandler
RestControllerExceptionHandler
@RestController
ControllerExceptionHandler
ControllerExceptionHandler