Анализировать содержимое JSON, являющееся списком или объектом, как List <A>с использованием Jackson - PullRequest
0 голосов
/ 03 декабря 2018

Несогласованный API-интерфейс JSON возвращает мне список объектов по какому-либо типу или один экземпляр этого типа объектов.Я хочу создать универсальный метод, который способен анализировать этот контент как List<A> (используя Джексона).

Так, например, первый вариант будет:

{ "error": "message" }

И второй вариант:

[{ "error": "message" }, /* ... */]

Подпись типа моего метода должна выглядеть как-токак это:

<A> List<A> eitherObjectOrList(String content, Class<A> c);

1 Ответ

0 голосов
/ 03 декабря 2018
public static void main(String[] args) throws Exception {
    String oneJson = "{ \"error\": \"message\" }";
    String arrJson = "[{ \"error\": \"message\" }, { \"error\": \"message2\" }]";
    List<Resp> result = eitherObjectOrList(oneJson, Resp.class);
    System.out.println(result);
    result = eitherObjectOrList(arrJson, Resp.class);
    System.out.println(result);
}

public static <A> List<A> eitherObjectOrList(String content, Class<A> c) throws Exception {
    ObjectMapper mapper = new ObjectMapper();
    mapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);
    return mapper.readValue(
            content,
            mapper.getTypeFactory().constructCollectionType(List.class, c)
    );
}

, где Resp является

public static class Resp {
    private String error;

    public String getError() {
        return error;
    }

    public void setError(String error) {
        this.error = error;
    }

    @Override
    public String toString() {
        return "Resp{" +
                "error='" + error + '\'' +
                '}';
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...