且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

Spring boot 中的异常处理程序不起作用?

更新时间:2022-06-18 23:47:00

如前所述,@ControllerAdvice 不能用于 Jersey.您可以使用带有注释 @ProviderExceptionMapper 将 Java 异常映射到 Jersey 响应.

As already mentioned, @ControllerAdvice cannot be used for Jersey. You can use ExceptionMapper with the annotation @Provider that maps Java exceptions to Jersey response.

ExceptionHandler:

@Provider
public class GlobalExceptionHandlerController implements ExceptionMapper<ResourceNotFoundException> {
  @Override
  public Response toResponse(ResourceNotFoundException e) {
    ExceptionResponse response = new ExceptionResponse();
    response.setErrorCode("resource not found");
    response.setErrorMessage(e.getMessage());

    return Response.status(404).entity(response)
    .type("application/json").build();
  }
}

不要忘记像您的 CustomerEndpoint 一样注册这个 GlobalExceptionHandlerController:

Don't forget to register this GlobalExceptionHandlerController just like your CustomerEndpoint:

@Configuration
public class JerseyConfig extends ResourceConfig {
  public JerseyConfig() {
    register(GlobalExceptionHandlerController.class);
    register(CustomerEndpoint.class); // your existing controller
  }
}