2013-07-30 40 views
0

我最近从Jersey 1.X移动到Jersey 2.1并使用jersey-media-json-jackson(去)序列化到Json。在JUnit(泽西客户端)中反序列化杰克逊列表

在我的JUnit测试中,我想要使用返回List的Web服务。 与Jerey 1.x我曾经使用GenericType。然而,folling代码不与新泽西州2.1工作/杰克逊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>. 

序列化是好的,因为下面的代码:

目标( “位置” ).request()接受(MediaType.APPLICATION_JSON)获得(String.class)。

返回一个有效的JSON字符串

任何想法如何解决?任何工作示例?


版本:

<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> 

回答

0

可能为时已晚,你找到了解决办法,但在这里它是一些人谁可能会遇到同样的问题。确保在创建客户端之前在客户端配置中注册JacksonFeature,代码示例如下。

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