【发布时间】:2017-06-15 18:48:33
【问题描述】:
如果您使用自定义序列化,如果属性名称不等于字段名称,您会得到意想不到的效果。 为什么字段会被序列化两次?
我的代码示例:
class Mode {
@JsonProperty("mode")
@JsonSerialize(using = ModeSerializer.class)
private boolean isPublic;
public Mode(boolean isPublic) {
this.isPublic = isPublic;
}
public boolean isPublic() {
return isPublic;
}
}
这是我的自定义字段序列化器:
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);
}
}
这里是测试:
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);
}
}
结果我收到了:
{"public":true,"mode":"public"}
我做错了什么?
【问题讨论】:
标签: java json serialization jackson