簡體   English   中英

在JUnit中使用Jackson進行反序列化列表(Jersey客戶端)

[英]Deserialize List with Jackson in JUnit (Jersey Client)

我最近從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>

可能為時已晚,您找到了解決方案,但是在這里,這是針對其他可能遇到相同問題的解決方案的。 在創建客戶端之前,請確保在客戶端配置上注冊了JacksonFeature,下面的代碼示例。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM