我有一个对象:
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不会发生,但我仍然试图了解幕后发生的事情。
答案 0 :(得分:1)
由于类dataForAllVendors
中类似于getter的命名方法,您获得了getDataForAllVendors()
字段。杰克逊默认发现并序列化所有可访问的字段,因此也会发现类中的getter命名方法。重命名此方法或将其标记为忽略将阻止序列化。
答案 1 :(得分:0)
@Sebastian Brudzinski提供的答案是正确答案。但是,他没有解释如何将方法标记为忽略。为此,请使用注释标记您的方法@JsonIgnore
将您的属性或getter方法标记为Jackson-JSON序列化将被忽略的方法。所以只是为了总结答案 - 更改方法,使其看起来不像getter(比如将其重命名为retrieveDataForAllVendors()
)或使用注释@JsonIgnore
标记它将解决您的问题