Java使用Rest服务GET中的JSON列表

时间:2012-04-02 19:14:57

标签: java json rest arraylist jersey

我收到的错误:

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。

1 个答案:

答案 0 :(得分:5)

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

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() { }
}