如何在ClientConfig上注册JacksonFeature

时间:2016-09-12 20:22:32

标签: java rest jersey jackson

如何使用jackson在resfull java项目上回馈JSON?

在关于在java中创建rest项目的文章http://www.vogella.com/tutorials/REST/article.html(8.4。创建客户端)之后,它说返回json继续如下:

public class TodoTest {

  public static void main(String[] args) {
    ClientConfig config = new new ClientConfig().register(JacksonFeature.class);
    Client client = ClientBuilder.newClient(config);

    WebTarget target = client.target(getBaseURI());
    System.out.println(target.path("rest").path("todo").request()
        .accept(MediaType.APPLICATION_JSON).get(String.class));
  }

  private static URI getBaseURI() {
    return UriBuilder.fromUri("http://localhost:8080_com.vogella.jersey.jaxb").build();
  }
} 

@XmlRootElement
public class Todo {
    private String id;
    private String summary;
    private String description;
    //getter/setter
}

但JacksonFeature.class不在Jackson.jar中。 我正在使用

jackson-annotations-2.8.2.jar
jackson-core-2.8.2.jar
jackson-databind-2.8.2.jar
jackson-jaxrs-base-2.8.2.jar
jackson-jaxrs-json-provider-2.8.2.jar
jackson-module-jaxb-annotations-2.8.2.jar

我怎么能解决它?

3 个答案:

答案 0 :(得分:4)

JacksonFeature来自泽西岛的图书馆(Maven中的jersey-media-json-jackson神器),而不是杰克逊。请参阅文档here。这是一种告诉Jersey&#34的方法;请使用Jackson库进行JSON解析和序列化",并且不是Jackson的一部分。

这似乎只是让泽西岛使用杰克逊的方法之一。 This article声明将以下XML放在pom.xml中足以让Jersey使用Jackson。它还表明这是一种更好的方式,并且泽西文档可能错误地鼓励使用JacksonFeature.class。链接文章还建议您不要使用jersey-media-json-jackson。

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

答案 1 :(得分:0)

org.glassfish.jersey.jackson.JacksonFeature中的JacksonFeature

必要。

jersey-media-json-jackson-2.23.2.jar
jersey-entity-filtering-2.23.2.jar

答案 2 :(得分:-1)

通过Gradle构建项目并添加以下依赖项: 编译&#39; org.glassfish.jersey.media:jersey-media-json-jackson:2.25.1&#39;