无法升级到杰克逊2.1.4,泽西岛忽略了注释

时间:2013-03-15 15:32:57

标签: json rest java-ee jersey jackson

简短版本:

我使用泽西岛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注释。为什么!?有人遇到过同样的问题吗?

2 个答案:

答案 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-json依赖
  • 添加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而被忽略