gpt4 book ai didi

java - Spring 中的自定义 @ControllerAdvice 用于异常处理

转载 作者:行者123 更新时间:2023-12-03 18:48:33 26 4
gpt4 key购买 nike

我试图将来自我的休息 Controller 的异常映射到具有主体的响应,并在一个中心位置进行。

我试过这个:

@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));
}
}

问题是处理程序永远不会被触发。

如果我使用 @ExceptionHandler 定义自定义方法在我的休息 Controller 中,或扩展具有 @ExceptionHandler 的东西,然后一切正常,但这会引入一些糟糕的设计。

我的理解是 Spring 将首先尝试在 Controller 中查找异常处理方法,然后它会检查已注册的处理程序。

我正在尝试通过 WebMvcTest 验证行为,并且我得到的响应不是我期望的 Error 对象。

有什么我想念的吗?

最佳答案

ControllerAdvice 是必须由 Spring 注册的配置。您必须在 config 包中移动您的类,或者您可以通过注释注册它。

就我而言,我使用这样的 controllerAdvice :

@ControllerAdvice
public class GlobalControllerExceptionHandler {

@ExceptionHandler(MyException.class)
public ResponseEntity<String> reponseMyException(Exception e) {
return ResponseEntity.status(HttpStatus.FORBIDDEN).body("my message");
}
}

关于java - Spring 中的自定义 @ControllerAdvice 用于异常处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50504918/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com