首页 > 解决方案 > 如何使用 Jersey 2.27 反序列化客户端站点上的 JSON 数组

问题描述

到目前为止,这是我的代码:

    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"}}, .... ]

我想以某种方式可以毫不费力地做到这一点,但我找不到任何不使用非常过时版本的泽西岛的例子。在文档中,我找不到有关数组反序列化的段落。

我感谢任何形式的帮助:)

标签: jsonjacksonjersey-client

解决方案


并回答我自己的问题:

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);

就是你所要做的,一个简单但很难找到的答案。


推荐阅读