无法升级到2.1.4杰克逊,新泽西忽略了注解(Unable to upgrade to Jackso

2019-07-21 17:07发布

简短的版本:

我使用的泽西1.17和杰克逊2.1.4,但新泽西州是忽略每一个杰克逊的注释,我使用。 为什么!? 有没有人遇到同样的问题?

长版:

我有一个使用泽西1.17和杰克逊1.9.2,我用的是@JsonManagedReference@JsonBackReference注解来解决双向关系的问题,一切工作正常RESTful Web服务。

有一天,我看到了2.1.4版本的杰克逊,包括在@JsonIdentityInfo注释这似乎是对我的问题的最佳解决方案,所以我改变的jar文件杰克逊2.1.4。 然而,有前途的@JsonIdentityInfo注释不工作和泽西岛完全忽略它,有点调试和修改代码后,我发现,即使是以前@JsonManagedReference@JsonBackReference注释被忽略新泽西州。 如此看来,新泽西是完全无视杰克逊2.1.4注解。 为什么!? 有没有人遇到同样的问题?

Answer 1:

正如指出http://wiki.fasterxml.com/JacksonAnnotations :

重要提示:杰克逊1.x和2.x注释住在不同的Java和Maven包:看到杰克逊2.0完整的解释:

  • 1.x的注解是Java包org.codehaus.jackson.annotate ,杰克逊核心罐子
  • 2.x的注解是Java包com.fasterxml.jackson.annotation ,在“杰克逊-数据绑定”罐子。

所以可能是一个“进口相关”的问题。 另一个原因(如已被@ HiJon89说明)是使用权JacksonJsonProvider版本。 2.x版它同时插入“杰克逊JAXRS JSON的提供者”与“泽西核”相结合自动注册。

我目前正在更新到2.1.4杰克逊(从1.9.2球衣所需的相关项)为:

  • 除去球衣JSON的依赖
  • 添加球衣核心和杰克逊JAXRS JSON的提供商

     <dependency> <groupId>com.sun.jersey</groupId> <artifactId>jersey-core</artifactId> <version>${jersey.version}</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.jaxrs</groupId> <artifactId>jackson-jaxrs-json-provider</artifactId> <version>${jackson-jaxrs-json-provider.version}</version> </dependency> 

后者罐子有一个文件“META-INF /服务/ javax.ws.rs.ext.MessageBodyWriter”告诉球衣什么类的行为作为一个供应商。

所以,我没有其他的提醒,而不是仔细检查,你没有老罐子了classpath中。



Answer 2:

在我的情况杰克逊注释是因为proguard相关的忽视



文章来源: Unable to upgrade to Jackson 2.1.4, Jersey ignoring the annotations