2013-07-30 77 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);