Java использует список JSON из сервиса Rest GET - PullRequest
1 голос
/ 02 апреля 2012

Я получаю ошибку:

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

Попытка получить JSON-ответ от сервиса Rest с помощью метода GET с Джерси. Ответ от сервера выглядит так, когда я использую 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 Ответ

5 голосов
/ 03 апреля 2012

Использовал библиотеку 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() { }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...