说我有以下课程:
public class Parent { public int age; @JsonUnwrapped public Name name; }
产生JSON:
{ "age" : 18, "first" : "Joey", "last" : "Sixpack" }
如何将其反序列化回Parent类?我可以使用@JsonCreator
@JsonCreator public Parent(Map<String,String> jsonMap) { age = jsonMap.get("age"); name = new Name(jsonMap.get("first"), jsonMap.get("last")); }
但这也会有效地添加@JsonIgnoreProperties(ignoreUnknown=true)到Parent类,因为所有属性都映射到此处。因此,如果您希望未知的JSON字段引发异常,则必须自己执行此操作。另外,如果映射值可能不是字符串,则必须进行一些手动类型检查和转换。杰克逊有办法自动处理此案吗?
@JsonIgnoreProperties(ignoreUnknown=true)
您可以为每个字段使用@JsonCreatorwith @JsonProperty:
@JsonCreator
@JsonProperty
@JsonCreator public Parent(@JsonProperty("age") Integer age, @JsonProperty("firstName") String firstName, @JsonProperty("lastName") String lastName) { this.age = age; this.name = new Name(firstName, lastName); }
在这种情况下,Jackson会为您进行类型检查和未知字段检查。