我可以使用异常处理程序来处理 Spring 异常吗

问题描述 投票:0回答:1

我已经构建了一个 Spring Boot 3 应用程序,我想要一个全局异常处理程序,以便如果抛出任何异常,则会返回自定义 json 消息。我想要防止的事情之一是,如果端点具有 long 类型的路径变量并且有人提供字符串,那么我会得到以下响应:

{
    "type": "about:blank",
    "title": "Bad Request",
    "status": 400,
    "detail": "Failed to convert 'id' with value: 'as'",
    "instance": "/api/company/as"
}

我添加了一个全局异常句柄,如下所示:

@Order(Ordered.HIGHEST_PRECEDENCE)
@ControllerAdvice
@Slf4j
public class GlobalExceptionHandler extends ResponseEntityExceptionHandler {

    @ExceptionHandler(Exception.class)
    protected ResponseEntity<Object> handleConflict(Exception ex) {
        log.error(ex.getMessage(), ex);

        return ResponseEntity.ok(ResponseDto.buildUnknownErrorResponse());
    }

}

但是,如果在端点调用之前抛出 spring 异常,例如 url 路径变量或 url 不存在,则它不会执行。

如何重写spring处理异常的方式?

spring spring-boot exception
1个回答
0
投票

控制器建议甚至可以在执行端点方法之前处理错误,在您的情况下,当参数无法转换时。

尝试如下更改您的 GlobalExceptionHandler 。

@ControllerAdvice
public class GlobalExceptionHandler  {

  private final Logger log = LoggerFactory.getLogger(GlobalErrorHandler.class);

  @ExceptionHandler(Exception.class)
  public ResponseEntity<String> handleError(Exception ex) {
    log.error(ex.getMessage(), ex);

    return ResponseEntity.ok("Unknown error message.");
  }
}
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.