Jackson:Object Mapper注释用于反序列化内部集合
我想使用尽可能多的注释将以下json转换为java对象。
{"user":{ "id":1, "diets":[ {"diet":{ "name":"...", "meals":[] } } ] } }
我在收集饮食方面遇到麻烦。 我试图使用@JsonProperty
但它无法正常工作。 地图内部聚合是否有特殊注释?
Diet.java
@JsonRootName(value = "diet") public class Diet { @JsonProperty(value="name") private String name; @JsonProperty(value="meals") private List meals; private User user; // Rest of the class omitted. }
User.java
@JsonRootName(value = "user") public class User { @JsonProperty("id") private long id; @JsonProperty("diets") private List diets = new ArrayList(); // Rest of the class omitted. }
谢谢!
你的json中的饮食对象不是List。 它是一个键值对的列表,具有关键的“饮食”,并且重视饮食对象。 所以你有三个选择。
一个是创建一个包装器对象说DietWrapper并在User中使用List of diet wrapper
@JsonRootName(value = "user") class User { @JsonProperty(value = "id") private long id; @JsonProperty(value = "diets") private List diets; //Getter & Setters } class DietWrapper { @JsonProperty(value = "diet") Diet diet; }
第二个选项是保持最简单的地图列表,如List>
@JsonRootName(value = "user") class User { @JsonProperty(value = "id") private long id; @JsonProperty(value = "diets") private List
第三种选择是使用自定义反序列化器,它会忽略你的饮食类。
@JsonRootName(value = "user") class User { @JsonProperty(value = "id") private long id; @JsonProperty(value = "diets") @JsonDeserialize(using = DietDeserializer.class) private List diets; //Getter & Setters } class DietDeserializer extends JsonDeserializer> { @Override public List deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException { ObjectMapper mapper = new ObjectMapper(); JsonNode node = mapper.readTree(jsonParser); List diets = mapper.convertValue(node.findValues("diet"), new TypeReference>() {}); return diets; } }