我最近从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>
答案 0 :(得分:0)
可能为时已晚,你找到了解决方案,但这里是其他可能遇到同样问题的人。确保在创建客户端之前在客户端配置上注册JacksonFeature,代码示例如下。
ClientConfig cc = new ClientConfig().register(new JacksonFeature());
Client client = ClientBuilder.newClient(cc);
WebTarget target = client.target(url);