2013-07-30 2 views
0

Недавно я перешел с Джерси 1.X на Jersey 2.1 и использовал jersey-media-json-jackson для (де-) сериализации для Json.Список Deserialize с Джексоном в JUnit (Джерси-клиент)

В моем тесте JUnit я хотел бы использовать веб-службу, которая возвращает список. С Jerey 1.x Я работал с GenericType. Тем не менее, феллинг код не работает с Джерси 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) .get (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); 
Смежные вопросы