O serializador customizado de Jackson serializa o campo duas vezes se o nome da propriedade não for igual ao nome do campo
Se você usar a serialização personalizada, poderá obter um efeito inesperado se o nome da propriedade não for igual ao nome do campo. Por que o campo é serializado duas vezes?
Meu exemplo de código:
class Mode {
@JsonProperty("mode")
@JsonSerialize(using = ModeSerializer.class)
private boolean isPublic;
public Mode(boolean isPublic) {
this.isPublic = isPublic;
}
public boolean isPublic() {
return isPublic;
}
}
Aqui meu serializador de campo personalizado:
class ModeSerializer extends JsonSerializer<Boolean> {
@Override
public void serialize(Boolean value, JsonGenerator gen, SerializerProvider serializers) throws IOException, JsonProcessingException {
String out = "private";
if (value) {
out = "public";
}
gen.writeString(out);
}
}
E aqui o teste:
public class Test {
public static void main(String[] args) throws IOException {
ObjectMapper mapper = new ObjectMapper();
Mode mode = new Mode(true);
String toJson = mapper.writeValueAsString(mode);
System.out.println(toJson);
}
}
E, como resultado, recebo:
{"public":true,"mode":"public"}
O que estou fazendo errado?