使用 ExceptionMapper 记录 CLIENT_ERRORs

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

    }

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


LEATH
浏览 184回答 1
1回答

一只斗牛犬

关于 ExceptionMapper 的JAX-RS 规范:选择异常映射提供程序以映射异常时,实现必须使用通用类型是异常的最近超级类的提供程序。我的应用程序如何知道它需要使用 CustomExceptionMapper 而不是 Dropwizard 类?您可以从应用程序中抛出自定义异常并为该特定异常创建一个 ExceptionMapper。将 CLIENT_ERROR 添加到 if 条件是否足以注销所有错误?是的,4xx 和 5xx 系列具有所有错误响应。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java