更新时间:2022-06-18 23:47:00
如前所述,@ControllerAdvice
不能用于 Jersey.您可以使用带有注释 @Provider
的 ExceptionMapper
将 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
}
}