我的课程定义如下:
// Ignore all the unknown properties in input JSON
@JsonIgnoreProperties(ignoreUnknown = true)
// Only include non null values in deserialized Java object.
@JsonInclude(value = Include.NON_NULL)
public class Person {
@JsonProperty("person_id")
private String personId;
@JsonProperty("school")
private String school;
@JsonProperty("hobbies")
private Map<String, List<AttributeBag>> hobbies = new HashMap<String, List<AttributeBag>>();
@JsonProperty("tasks")
private Map<String, Map<String, AttributeBag>> tasks = new HashMap<String, Map<String, AttributeBag>>();
public Map<String, List<AttributeBag>> getHobbies() {
return hobbies;
}
public Person(String person_id, String school) {
super();
this.person_id = person_id;
this.school = school;
}
当我使用下面的JSON字符串从字符串反序列化时,
{
"person_id":"123",
"school":"stanford University"
}
从我反序列化的对象中,业余爱好是创建但是空的,甚至没有创建任务。我期待像&#34; tasks&#34;这样的方式,如果JSON中没有相应的字段,它不应该在对象中反序列化。
但奇怪的是:当我检查object.getHobbies()!= null但是tasks部分为null。如果它们不存在于JSON中,我希望它们在对象中都为null。
我有Person类的构造函数,但我没有初始化两个爱好和任务部分。
非常感谢
答案 0 :(得分:1)
@JsonProperty("hobbies")
private Map<String, List<AttributeBag>> hobbies = new HashMap<String, List<AttributeBag>>();
@JsonProperty("tasks")
private Map<String, Map<String, AttributeBag>> tasks = new HashMap<String, Map<String, AttributeBag>>();
从上面的代码中可以看出,无论如何,你都在为业余爱好和任务创建新的对象,我无法理解为什么你的任务没有被创建(它应该被创建为一个空的地图)
并回答你的问题@JsonInclude(value = Include.NON_NULL)
应该做的伎俩!
答案 1 :(得分:1)
JSON反序列化器不会尝试设置不会出现在JSON结构中的字段,但这些行:
@JsonProperty("hobbies")
private Map<String, List<AttributeBag>> hobbies = new HashMap<String, List<AttributeBag>>();
@JsonProperty("tasks")
private Map<String, Map<String, AttributeBag>> tasks = new HashMap<String, Map<String, AttributeBag>>();
正在创建对象构造的值。
如果您希望它们为null,则不要在对象中分配它们,只需留下声明:
@JsonProperty("hobbies")
private Map<String, List<AttributeBag>> hobbies;
@JsonProperty("tasks")
private Map<String, Map<String, AttributeBag>> tasks;