使用ExceptionMapper记录CLIENT_ERROR

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

我正在开发一个使用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();
    }

或者有更好的方法来做到这一点?

java exception-handling jax-rs dropwizard exceptionmapper
1个回答
2
投票

关于ExceptionMapper的JAX-RS spec

在选择异常映射提供程序来映射异常时,实现必须使用其泛型类型是异常的最近超类的提供程序。

我的应用程序如何知道它需要使用CustomExceptionMapper而不是Dropwizard类?

您可以从应用程序中抛出自定义异常,并为该特定异常创建ExceptionMapper。

将CLIENT_ERROR添加到if条件是否足以注销所有错误?

是的,4xx和5xx系列有所有错误响应。

© www.soinside.com 2019 - 2024. All rights reserved.