首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在JsonMappingException中捕获ExceptionMapper<Throwable>

在JsonMappingException中捕获ExceptionMapper<Throwable>
EN

Stack Overflow用户
提问于 2014-11-05 12:21:40
回答 1查看 1.6K关注 0票数 2

我们正在实现一个RestSerivce,我们有一个问题是泽西处理JsonMappingException的。

我们要做的是将所有异常包装到特定的类RestError。但问题是泽西岛的JsonMappingException不会被ExceptionMapper抓到

RestError类

代码语言:javascript
复制
@XmlRootElement(name = "error")
@XmlAccessorType(XmlAccessType.FIELD)
public class RestError {

    private int statusCode;
    private RestErrorCode errorCode;
    private String message;
    private List<String> fullStackTrace;
}

ExeceptionMapper类

代码语言:javascript
复制
@Provider
@Priority(Priorities.USER)
public class ThroawableExceptionMapper implements ExceptionMapper<Throwable> {
    @Override
    public Response toResponse(Throwable throwable) {
        //Wrapping to RestError won't catch JsonMappingException
    }
}

服务器端异常的堆栈跟踪表明其原因是org.glassfish.jersey.server.internal.process.MappableException:

EN

回答 1

Stack Overflow用户

发布于 2014-11-10 15:26:40

根据泽西的文档,自动发现功能默认是启用泽西自动发现

如果类路径中存在jackson-jaxrs-base-2.x.x.jar,则JsonMappingExceptionMapper和JsonParseExceptionMapper都会自动注册,因为ExceptionMappers是泽西识别的额外SPIs。此外,bothJsonMappingExceptionMapper和JsonParseExceptionMapper被@Provider注释所困扰。

若要禁用此自动发现功能,需要设置FEAUTURE_AUTO_DISCOVERY_DISABLE属性。见泽西配置自动发现机制。这样杰克逊就不再注册了。

代码语言:javascript
复制
resourceConfig.property(CommonProperties.FEATURE_AUTO_DISCOVERY_DISABLE, true);

现在注册您的资源、ExceptionMapper和JacksonJaxbJsonProvider (不要注册JacksonFeature.class)。

代码语言:javascript
复制
resourceConfig.register(com.organization.resources.InfoResource.class);
resourceConfig.register(com.organization.resources.ThrowableExceptionMapper.class);
resourceConfig.register(com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider.class);

像这样,JsonMappingException将被捕获在ThrowableExceptionMapper类中。

这个设置对我有效,但缺点是我不能再用包注册我的资源了,我确信有更好的方法来达到目标,任何改进都是受欢迎的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26757099

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档