我使用Jersey 2.5.1和Jackson 2.2 . 用于构建JSON Rest Web服务 . 我有点了,并且运行了2个ExceptionMappers但是对于“not-json”请求,应用程序没有抛出任何异常!
-
ExceptionMapper将被调用,例如抛出NullPointerException
-
ExceptionMapper如果JSon Mapping出现问题,将调用它
我的问题:1 . 请求正文:{}工作2.请求正文:{}与应用程序端NullPointer调用第一个异常映射器3.请求正文:“jibberish”不调用任何东西(没有被任何ExceptionMapper捕获)导致没有异常被扔了 . 不幸的是,响应主体是这样的:无法识别的字段“xxx”(类com.sample.MyDto),未标记为可忽略(9个已知属性......)但我想自定义错误消息,因为我总是返回一个JSon对象 .
2 回答
好的,我解决了 . 最后让我觉得正确的方法是,有时它有效,所以它必须是一些覆盖类加载问题 .
在我的ApplicationClass中,我根据这样的包注册了Providers
如果你看起来很锋利,你可能会看到错误!我在搜索路径上放了“com.fasterxml.jackson.jaxrs.json”,因为我想使用JacksonJsonProvider.class . 我不知道的是,在那个包中还有一些JSonMappers用于JSonParseException等,而那些不记录:)
所以有时应用程序首先加载我的,有时候是 Jackson 加载的 . 所以我现在要坚持以下内容:
希望有助于某事:D
我也发现某些时候,ExceptionMapper无法正常工作,并且它并不总是有效或无效 .
所以我调试了球衣的源代码 .
class:org.glassfish.jersey.server.ServerRuntime,methed:mapException
如果映射器为null,那么coustom ExceptionMapper将不起作用 .
class:org.glassfish.jersey.internal.ExceptionMapperFactory methed:ExceptionMapperFactory
异常映射器:(有两个异常映射一个异常:java.lang.Exception)
...
这是因为在MvcFeature中:
ErrorTemplateExceptionMapper也添加到ExceptionMapper .
so i change my custom MapperException's genericity type : ExceptionMapper to ExceptionMapper
可能是我的分辨率不适合你,主要问题是ExceptionMapper .