gpt4 book ai didi

java - 如果属性名称不等于字段名称,则 Jackson 自定义序列化程序将字段序列化两次

转载 作者:行者123 更新时间:2023-12-01 14:34:34 26 4
gpt4 key购买 nike

如果您使用自定义序列化,如果属性名称不等于字段名称,您可能会得到意想不到的效果。为什么该字段被序列化两次?

我的代码示例:

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"}

我做错了什么?

最佳答案

感谢您的详细回答。
你是对的我需要隔离getter Public,这不仅可以重命名这个方法,还可以在方法上使用注解@JsonIgnore。像这样:

class Mode {
@JsonProperty("mode")
@JsonSerialize(using = ModeSerializer.class)
private boolean isPublic;

public Mode(boolean isPublic) {
this.isPublic = isPublic;
}

@JsonIgnore
public boolean isPublic() {
return isPublic;
}
}

这对我有用。

关于java - 如果属性名称不等于字段名称,则 Jackson 自定义序列化程序将字段序列化两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44574835/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com