栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

泽西岛…如何记录所有异常,但仍然调用ExceptionMappers

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

泽西岛…如何记录所有异常,但仍然调用ExceptionMappers

要返回正确的http状态代码,您的异常映射器可能看起来像这样:

@Providerpublic class RestExceptionMapper implements ExceptionMapper<Throwable>{    private static final Logger log = LoggerFactory.getLogger(RestExceptionMapper.class);    @Override    public Response toResponse(Throwable exception)    {        log.error("toResponse() caught exception", exception);        return Response.status(getStatusCode(exception))     .entity(getEntity(exception))     .build();    }        private int getStatusCode(Throwable exception)    {        if (exception instanceof WebApplicationException)        { return ((WebApplicationException)exception).getResponse().getStatus();        }        return Response.Status.INTERNAL_SERVER_ERROR.getStatusCode();    }        private Object getEntity(Throwable exception)    {        // return stack trace for debugging (probably don't want this in prod...)        StringWriter errorMsg = new StringWriter();        exception.printStackTrace(new PrintWriter(errorMsg));        return errorMsg.toString();     }}

也听起来您对级联异常映射器感兴趣,但是根据规范,这是不可能的:

JAX-RS 2.0规范,第4.4章

“异常映射提供程序将已检查的或运行时异常映射到Response实例。异常映射提供程序实现ExceptionMapper接口,并且可以使用@Provider进行注释以进行自动发现。在选择异常映射提供程序来映射异常时,必须使用实现泛型类型是异常的最接近超类的提供程序。

当资源类或提供程序方法引发异常时,存在一个异常映射提供程序,则匹配提供程序用于获取Response实例。处理结果响应,就像Web资源方法已返回响应一样,请参阅第3.3.3节。特别是,必须使用第6章中定义的ContainerResponse过滤器链来处理映射的Response。

为避免潜在的无限循环,在处理请求及其相应的响应期间必须使用单个异常映射器。JAX-
RS实现不得在处理先前从异常映射的响应时尝试映射抛出的异常。相反,必须按照3.3.4节中的步骤3和4所述处理此异常。”



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/453750.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号