我收到的错误:
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。
最佳答案
使用 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() { }
}
关于Java 使用来自 Rest 服务 GET 的 JSON 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9982422/