在JUnit中使用Jackson反序列化列表(Jersey客户端)

时间:2013-07-30 19:04:54

标签: json jaxb jackson jersey-client

我最近从Jersey 1.X转到泽西岛2.1并使用jersey-media-json-jackson(de-)序列化到Json。

在我的JUnit-Test中,我想使用一个返回List的Web服务。 使用Jerey 1.x我曾经使用过GenericType。但是,后续代码不适用于Jersey 2.1 / Jackson 2.1:

GenericType<Collection<String>> listType = new GenericType<Collection<String>>() {};
assertTrue(target("location").request().get(listType).contains("item"));

崩溃
org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException: 
MessageBodyReader not found for media type=application/json, 
type=interface java.util.List, genericType=java.util.Collection<java.lang.String>.

序列化是可以的,因为遵循以下代码:

  

目标( “位置”)请求()接受(MediaType.APPLICATION_JSON)获得(String.class);

返回有效的Json String

任何想法如何解决?任何工作的例子?


版本:

    <dependency>
        <groupId>org.glassfish.jersey.core</groupId>
        <artifactId>jersey-common</artifactId>
        <version>2.1</version>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jersey.core</groupId>
        <artifactId>jersey-server</artifactId>
        <version>2.1</version>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jersey.containers</groupId>
        <artifactId>jersey-container-servlet</artifactId>
        <version>2.1</version>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jersey.media</groupId>
        <artifactId>jersey-media-json-jackson</artifactId>
        <version>2.1</version>
    </dependency>

1 个答案:

答案 0 :(得分:0)

可能为时已晚,你找到了解决方案,但这里是其他可能遇到同样问题的人。确保在创建客户端之前在客户端配置上注册JacksonFeature,代码示例如下。

ClientConfig cc = new ClientConfig().register(new JacksonFeature());
Client client = ClientBuilder.newClient(cc);
WebTarget target = client.target(url);