2014-11-05 17 views
2

,我们正在实施一个RestSerivce,我们有一个问题,泽西处理JsonMappingException捕捉JsonMappingException在ExceptionMapper <Throwable>

我们想要做的是包装的所有异常到一个特定的类RestError。但问题是,泽西JsonMappingException不会在ExceptionMapper

的RestError类逮住

@XmlRootElement(name = "error") 
@XmlAccessorType(XmlAccessType.FIELD) 
public class RestError { 

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

的ExeceptionMapper类

@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:

+0

感谢链接,但我无法找到解决方案。 – sandrozbinden 2014-11-06 08:09:55

+0

有开放票@https://github.com/FasterXML/jackson-jaxrs-providers/issues/22 – sandrozbinden 2014-11-10 14:29:17

+0

您使用哪种泽西和杰克逊图书馆?你碰巧拥有* jesey-media-json-jackson *库吗? – 2015-05-21 11:15:52

回答

1

根据泽西岛文档entation自动发现功能在默认情况 Jersey Auto Discoverable

如果杰克逊JAXRS碱基2.x.x.jar出现在你的classpath既JsonMappingExceptionMapper和JsonParseExceptionMapper自动临时用户,因为ExceptionMappers是由新泽西州的认可额外的SPI启用。此外,JsonMappingExceptionMapper和JsonParseExceptionMapper都使用@Provider注释进行注释。

要禁用此自动发现功能,您需要设置FEAUTURE_AUTO_DISCOVERY_DISABLE属性。见Jersey Configuring Auto-discovery Mechanism。这样杰克逊不再被注册。

resourceConfig.property(CommonProperties.FEATURE_AUTO_DISCOVERY_DISABLE, true); 

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

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类中。

此设置为我工作,但有我不能以包注册我的资源劣势了我敢肯定有更好的方式来达到目标​​的任何改进措施非常欢迎

+0

你也可以用'resourceConfig.package(“com.example.providers”)来扫描你自己的包;'' – 2016-02-17 23:34:38