简短版本:
我使用泽西岛1.17和杰克逊2.1.4,但泽西岛忽略了我使用的每一个杰克逊注释。为什么!?有人遇到过同样的问题吗?
长版:
我有一个使用Jersey 1.17和Jackson 1.9.2的RESTful Web服务,我使用 @JsonManagedReference 和 @JsonBackReference 注释来解决双向问题关系和一切都很好。
前几天我看到了杰克逊的2.1.4版本,其中包含了 @JsonIdentityInfo 注释,这对我的问题似乎是一个很好的解决方案,因此我将jar文件更改为Jackson 2.1.4。然而,有希望的 @JsonIdentityInfo 注释不起作用,Jersey完全无视它,经过一些调试和更改代码后,我发现即使是之前的 @JsonManagedReference @JsonBackReference 注释被忽略。因此,泽西岛似乎完全无视杰克逊2.1.4注释。为什么!?有人遇到过同样的问题吗?
答案 0 :(得分:3)
如http://wiki.fasterxml.com/JacksonAnnotations中所述:
重要提示:Jackson 1.x和2.x注释存在于不同的Java中 和Maven包:请参阅Jackson 2.0获得完整解释:
- 1.x注释位于Java包
中org.codehaus.jackson.annotate
中,位于Jackson core jar- 2.x注释位于Java包
com.fasterxml.jackson.annotation
中,位于“jackson-databind”jar中。
因此可能是“与进口相关”的问题。 另一个原因(如@ HiJon89所述)是使用正确的JacksonJsonProvider版本。对于版本2.x,它会在插入“jackson-jaxrs-json-provider”和“jersey-core”时自动注册。
我目前正在进行的杰克逊2.1.4更新(来自1.9.2球衣所需的依赖)是:
添加jersey-core和jackson-jaxrs-json-provider
<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>
后一个jar有一个文件“META-INF / services / javax.ws.rs.ext.MessageBodyWriter”告诉球衣什么类充当提供者。
所以我没有其他建议,只能仔细检查你的类路径中是否还有旧的罐子。
答案 1 :(得分:0)
在我的情况下,杰克逊注释因为proguard而被忽略