假设我有以下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;
   }
}


这对我来说很好。

09-26 06:40