【发布时间】:2018-06-17 12:25:21
【问题描述】:
我有一个对象:
public class MoQueryData {
private Map<String,Map<String,MoQuery>> data;
public MoQueryData() {
data = new HashMap<>();
}
public MoQueryData(Map<String, Map<String, MoQuery>> data) {
this.data = data;
}
public Map<String, Map<String, MoQuery>> getData() {
return data;
}
public List<MoQuery> getDataForAllVendors() {
return data.values().stream().flatMap(l -> l.values().stream()).collect(Collectors.toList());
}
}
像这样在控制器中使用它:
@RequestMapping(method = RequestMethod.GET ,value = "/queries/")
public MoQueryData getMoQueriesData() {
return moQuery.getData();
}
我们得到以下json
{
"data": {....},
"dataForAllVendors": [....]
}
我不明白为什么要调用 getDataForAllVendors? 使用@JsonIgnore 它不会发生,但我仍然试图了解幕后发生的事情。
【问题讨论】:
-
反序列化不是由spring完成的,而是由JSON框架完成的,例如Jackson。如果我不得不猜测,我会说它默认使用所有
public方法进行反序列化。如果我没记错的话,Jackson 有一些检测 getter 的逻辑,但是由于您的getDataForAllVendrs()-method 不符合他们的方案,因此它被视为单独的属性。
标签: java spring-boot jackson