В качестве входных данных для моего приложения я могу получить либо один JsonObject, либо их список:
input1 = [ { "prop": "val1" }, { "prop": "val2" } ]
input2 = { "prop": "val" }
Я могу использовать JsonNode
в качестве целевого типа для обоих входов
objectMapper.readValue(input1, JsonNode.class);
objectMapper.readValue(input2, JsonNode.class);
И затем оцените, является ли root узел ArrayNode
или ObjectNode
.
. Я ищу способ определить мой пользовательский целевой тип, например List<MyObject>
, который имеет один элемент, если JsonObject предоставляется, или от нуля до нескольких, если предоставляется список.
objectMapper.readValue(input, new TypeRef<ArrayList<MyObject>>() {});
однако не удается для одного объекта - он не может создать c Array-Type из {.
Я пытался создать свой собственный тип:
public class MyList extends ArrayList<MyObject> {
public String prop;
@JsonCreator
public MyList(String prop) {
super();
this.prop = prop; // Resp add(new MyObject(prop));
}
public MyList() {}
}
Но Джексон отказывается использовать JsonCreator для отдельных объектов.
Есть ли способ, который я мог бы сделать (в идеале без специального сериализатора Если только это не может быть сделано довольно обобщенно c)