Java spring如何引导序列化对象
我有一个目标:Java spring如何引导序列化对象,java,spring-boot,jackson,Java,Spring Boot,Jackson,我有一个目标: 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 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());
}
我们得到以下json
{
"data": {....},
"dataForAllVendors": [....]
}
我不明白为什么要调用getDataForAllVendors?
使用@JsonIgnore时,它不会发生,但我仍在试图理解引擎盖下发生了什么。由于类中类似getter的命名方法,您将获得
dataForAllVendors
字段getDataForAllVendors()。默认情况下,Jackson会发现并序列化所有可访问的字段,因此也会发现类中的getter命名方法。重命名此方法或将其标记为忽略将阻止序列化。由于类中类似getter的命名方法getDataForAllVendors()
,您将获得dataForAllVendors
字段。默认情况下,Jackson会发现并序列化所有可访问的字段,因此也会发现类中的getter命名方法。重命名此方法或将其标记为忽略将阻止序列化。由@Sebastian Brudzinski提供的答案是正确的。然而,他并没有解释如何将该方法标记为忽略。为此,使用注释标记方法@JsonIgnore
将属性或getter方法标记为Jackson JSON序列化将忽略的方法。因此,只需对答案进行总结-更改方法,使其看起来不像getter(比如将其重命名为retrieveDataForAllVendors()
),或使用注释标记它@JsonIgnore
即可解决您的问题。由@Sebastian Brudzinski提供的答案是正确的答案。然而,他并没有解释如何将该方法标记为忽略。为此,使用注释标记方法@JsonIgnore
将属性或getter方法标记为Jackson JSON序列化将忽略的方法。因此,只需对答案进行总结-更改方法,使其看起来不像getter(比如将其重命名为retrieveDataForAllVendors()
),或使用注释标记它@JsonIgnore
即可解决问题反序列化不是由spring完成的,而是由JSON框架完成的,例如。如果让我猜的话,我会说它默认使用所有public
方法进行反序列化。如果我没记错的话,Jackson有一些逻辑来检测getter,但是由于您的getDataForAllVendrs()
-方法不适合他们的方案,因此它被视为一个单独的属性。反序列化不是由spring完成的,而是由JSON框架完成的,例如。如果让我猜的话,我会说它默认使用所有public
方法进行反序列化。如果我没记错的话,Jackson有一些检测getter的逻辑,但是由于您的getDataForAllVendrs()
-方法不符合他们的方案,它被视为一个单独的属性。花了几个小时试图找出我的代码有什么问题。救了我的命。感谢你花了几个小时试图找出我的代码出了什么问题。救了我的命。谢谢
{
"data": {....},
"dataForAllVendors": [....]
}