spring boot如何序列化对象

时间:2018-06-17 12:25:22

标签: 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 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不会发生,但我仍然试图了解幕后发生的事情。

2 个答案:

答案 0 :(得分:1)

由于类dataForAllVendors中类似于getter的命名方法,您获得了getDataForAllVendors()字段。杰克逊默认发现并序列化所有可访问的字段,因此也会发现类中的getter命名方法。重命名此方法或将其标记为忽略将阻止序列化。

答案 1 :(得分:0)

@Sebastian Brudzinski提供的答案是正确答案。但是,他没有解释如何将方法标记为忽略。为此,请使用注释标记您的方法@JsonIgnore将您的属性或getter方法标记为Jackson-JSON序列化将被忽略的方法。所以只是为了总结答案 - 更改方法,使其看起来不像getter(比如将其重命名为retrieveDataForAllVendors())或使用注释@JsonIgnore标记它将解决您的问题