我正在开发一个使用Dropwizard的应用程序,它具有ExceptionMapper的实现:https://github.com/dropwizard/dropwizard/blob/master/dropwizard-jersey/src/main/java/io/dropwizard/jersey/errors/LoggingExceptionMapper.java
这个实现的问题在于,即使这会捕获4 **和5 **错误,它也只记录5 **错误。
我需要实现ExceptionMapper,以便根本不使用LoggingExceptionMapper,我的CustomExceptionMapper记录CLIENT_ERRORs和SERVER_ERRORs。
我想知道我的应用程序将如何知道它需要使用CustomExceptionMapper而不是Dropwizard类?
也可以将CLIENT_ERROR添加到if条件,以便注销所有错误吗?
@Override
public Response toResponse(E exception) {
// If we're dealing with a web exception, we can service certain types of request (like
// redirection or server errors) better and also propagate properties of the inner response.
if (exception instanceof WebApplicationException) {
final Response response = ((WebApplicationException) exception).getResponse();
Response.Status.Family family = response.getStatusInfo().getFamily();
if (family.equals(Response.Status.Family.REDIRECTION)) {
return response;
}
if (family.equals(Response.Status.Family.SERVER_ERROR) || family.equals(Response.Status.Family.CLIENT_ERROR) {
logException(exception);
}
return Response.fromResponse(response)
.type(MediaType.APPLICATION_JSON_TYPE)
.entity(new ErrorMessage(response.getStatus(), exception.getLocalizedMessage()))
.build();
}
或者有更好的方法来做到这一点?
关于ExceptionMapper的JAX-RS spec:
在选择异常映射提供程序来映射异常时,实现必须使用其泛型类型是异常的最近超类的提供程序。
我的应用程序如何知道它需要使用CustomExceptionMapper而不是Dropwizard类?
您可以从应用程序中抛出自定义异常,并为该特定异常创建ExceptionMapper。
将CLIENT_ERROR添加到if条件是否足以注销所有错误?
是的,4xx和5xx系列有所有错误响应。