假设我有以下POJO
public class Pojo {
private Set<String> stringSet = new HashSet<>();
}
当我将其序列化为json时,得到以下输出
{"stringSet":[]}
但是,根据要求,我需要以下内容:
{"stringSet":null}
我试图实现自定义
StdSerializer<Set>
public class CustomStdSerializer extends StdSerializer<Set> {
protected CustomStdSerializer() {
super(Set.class);
}
@Override
public void serialize(Set set, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
if (set.size() == 0){
jsonGenerator.writeNull();
}
}
}
但是它的输出如下
{"stringSet":}
如何在JSON中写入空值?
最佳答案
不久前,我有完全相同的要求。
获得[] stringSet的原因是,在声明本身期间,您正在执行new HashSet<>();
我很确定,在您的setter方法中,您可能只是在做
public void setStringSet(Set<String> stringSet){
this.stringSet = stringSet;
}
相反,你可以做
public void setStringSet(Set<String> stringSet){
if(stringSet.isEmpty()){
this.stringSet.clear();
} else{
this.stringSet = stringSet;
}
}
这对我来说很好。