десериализовать JSON с помощью Jackson с динамическим именем - PullRequest
0 голосов
/ 28 июня 2018

Я пытаюсь десериализовать json с помощью Джексона, проблема в том, что имена полей не всегда совпадают, например

Один звонок даст мне

{
  id: "blabla"
  aFieldname : { an object if type A} 
}

Another call will give me 

{
  id: "blabla"
  anotherName : { the same kind of object } 
}

Я не могу предсказать название поля. это вообще возможно?

1 Ответ

0 голосов
/ 28 июня 2018

Вы можете десериализовать JSON как Map<String, Object>:

ObjectMapper mapper = new ObjectMapper();

TypeReference<HashMap<String, Object>> typeReference = 
    new TypeReference<HashMap<String, Object>>() {};
Map<String, Object> data = mapper.readValue(json, typeReference);

Или вы можете использовать @JsonAnySetter:

public class Data {

    private String id;
    private Map<String, Object> unknownFields = new HashMap<>();

    // Getters and setters (except for unknownFields)

    @JsonAnySetter
    public void setUnknownField(String name, Object value) {
        unknownFields.put(name, value);
    }
}

Если вам известны возможные имена свойства, вы можете использовать аннотацию @JsonAlias, которая была введена в Jackson 2.9 :

public class Data {

    private String id;

    @JsonAlias({ "onePossibleName", "anotherPossibleName" })
    private Foo something;

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