ior*_*vic 6 java rest spring exception spring-restcontroller
我试图将异常从我的休息控制器映射到具有主体的响应,并在中心位置执行此操作。
我已经尝试过这个:
@Order(Ordered.HIGHEST_PRECEDENCE)
@ControllerAdvice
public class RestErrorResponseExceptionHandler extends ResponseEntityExceptionHandler {
@Override
protected ResponseEntity<Object> handleExceptionInternal(
Exception ex, Object body, HttpHeaders headers, HttpStatus status, WebRequest request) {
super.handleExceptionInternal(ex, body, headers, status, request);
return ResponseEntity.status(status).body(Error.from(status));
}
}
Run Code Online (Sandbox Code Playgroud)
问题是处理程序永远不会被触发。
@ExceptionHandler如果我在其余控制器中定义一个自定义方法,或者扩展具有 的东西@ExceptionHandler,那么一切都会很好,但这会引入一些糟糕的设计。
据我了解,Spring 将首先尝试在控制器中查找异常处理方法,然后检查已注册的处理程序。
我试图通过 WebMvcTest 验证行为,并且我得到的响应不是我期望的 Error 对象。
我有什么遗漏的吗?
小智 6
ControllerAdvice是一个必须由Spring注册的配置。您必须将您的类移动到配置包中,或者您可以通过注释注册它。
就我而言,我使用像这样的controllerAdvice:
@ControllerAdvice
public class GlobalControllerExceptionHandler {
@ExceptionHandler(MyException.class)
public ResponseEntity<String> reponseMyException(Exception e) {
return ResponseEntity.status(HttpStatus.FORBIDDEN).body("my message");
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10667 次 |
| 最近记录: |