0

我最近从 Jersey 1.X 迁移到 Jersey 2.1,并使用 jersey-media-json-jackson (反)序列化为 Json。

在我的 JUnit-Test 中,我想使用一个返回列表的 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>.

序列化没问题,因为下面的代码:

target("location").request().accept(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>
4

1 回答 1

0

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

ClientConfig cc = new ClientConfig().register(new JacksonFeature());
Client client = ClientBuilder.newClient(cc);
WebTarget target = client.target(url);
于 2013-11-20T11:49:09.007 回答