Как десериализовать массив JSON на клиентском сайте с помощью Jersey 2.27 - PullRequest
0 голосов
/ 06 мая 2018

Это мой код:

    public ArrayList<Person> getGames() {

    WebTarget target = webTarget.path("some/path");

    Invocation.Builder invocationBuilder = target.request(MediaType.APPLICATION_JSON);

//        add authentication cookie to get request
    Response response = invocationBuilder.cookie(this.cookie).get();

    int status = response.getStatus();

    if (status == 200) { // everything ok

        // response has wrong MediaType (text/plain from server side)
        // this sets the right MediaType so Jackson (Json deserialization) will handle it
        response.getHeaders().putSingle(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON);

//     How do I do this?
       ArrayList<Person> list = response.readEntity(???);

        return list;
    } else {
        return new ArrayList<GameInfo>(); // FIXME: This may throw an exception
    }
}

Я знаю, как десериализуется один объект JSON:

Person person = response.readEntity(Person.class);

и это делается внутренне (с Джексоном, я думаю).

Моя проблема в том, что я получаю JSON в форме:

[{"name":"name","age":"age","lives":{"street":"myStreet"}}, .... ]

Я полагаю, что это можно сделать без особых хлопот, но я не могу найти ни одного примера, в котором бы не использовались сильно устаревшие версии Джерси. В документации я не смог найти абзац, который говорит о десериализации массива.

Я ценю любую помощь:)

1 Ответ

0 голосов
/ 06 мая 2018

И чтобы ответить на мой собственный вопрос:

https://www.reddit.com/r/javahelp/comments/7qkvjm/how_to_parse_json_array_with_2_or_more_different/

большое спасибо webdevnick22.

Person[] persons = response.readEntity(Person[].class);

- это все, что вам нужно сделать, простой, но трудно найти ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...