【问题标题】:Java consume JSON list from Rest service GETJava 使用来自 Rest 服务 GET 的 JSON 列表
【发布时间】:2012-04-02 19:14:56
【问题描述】:

我收到的错误:

SEVERE: A message body reader for Java class java.util.List, 
and Java type java.util.List<com.testapp.Category>, 
and MIME media type text/html; charset=utf-8 was not found

尝试使用带有 Jersey 的 GET 方法来使用来自 Rest 服务的 JSON 响应。当我使用 curl 时,来自服务器的响应如下所示:

[{"category":{"id":"4d9c5dfc8ddfd90828000002","description":"Cows"}},
{"category":{"id":"4d9c5dfc8ddfd90828000023","description":"Dogs"}},
...
{"category":{"id":"4d9c5dfc8ddfd90828000024","description":"Mules"}}]

使用服务:

public List<Category> getAnimalCategories(Cookie cookie) {
    Client client = Client.create(new DefaultClientConfig());
    ClientResponse response = client
        .resource(Constants.BASE_URL)
        .path(Constants.CATEGORIES_ANIMALS)
        .accept(MediaType.APPLICATION_JSON)
        .type(MediaType.APPLICATION_JSON)
        .cookie(cookie)
        .get(ClientResponse.class);

    return response.getEntity(new GenericType<List<Category>>(){});
}

Category.java 在哪里:

public class Category {

public String id;
public String description;

public Category() {
}

public Category(String id, String description) {
    super();
    this.id = id;
    this.description = description;
}

该服务使用基于 cookie 的身份验证 - 这部分有效,我还有其他使用 cookie 的服务调用。

【问题讨论】:

标签: java json rest arraylist jersey


【解决方案1】:

使用 Jackson 1.9.6 库来解决问题 - 请参阅下面的第二行:

ClientConfig clientConfig = new DefaultClientConfig();
clientConfig.getClasses().add(JacksonJsonProvider.class);
Client client = Client.create(clientConfig);

return client
    .resource(Constants.BASE_URL)
    .path(Constants.CATEGORIES_ANIMALS)
    .type(MediaType.APPLICATION_JSON)
    .accept(MediaType.APPLICATION_JSON)
    .cookie(cookie)
    .get(new GenericType<List<AnimalCategoryResponse>>(){});

还需要使用新的响应类:

public class AnimalCategoryResponse {
    public Category[] category;
    public AnimalCategoryReponse() { }
}

【讨论】:

  • 谢谢我有这个问题很长一段时间,我在球衣文档的某个地方看到它会扫描提供者的类路径,并且会自动发现 JacksonProvider,但这似乎是不正确的。添加 JacksonJsonProvider 后,我的代码就可以工作了。
猜你喜欢
  • 2017-12-22
  • 2012-10-08
  • 2016-12-05
  • 2018-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-14
相关资源
最近更新 更多