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": [....]
   }