java - 杰克逊:我怎么能忽略getter但解析setter?
问题描述
我需要序列化一个没有给定字段的 bean,但反序列化具有该字段的 bean。我@JsonIgnore
在 getter 和@JsonIgnore(false)
setter 上使用:
public class TestJson {
private String s1, s2;
@JsonIgnore
public String getS1() {
return s1;
}
@JsonIgnore(false)
public void setS1(String s1) {
this.s1 = s1;
}
public String getS2() {
return s2;
}
public void setS2(String s2) {
this.s2 = s2;
}
public static void main(String[] args) throws Exception {
ObjectMapper mapper = new ObjectMapper();
TestJson bean = new TestJson();
bean.setS1("test1");
bean.setS2("test2");
System.out.println(mapper.writeValueAsString(bean));
String json = "{\"s1\":\"test1\",\"s2\":\"test2\"}";
bean = mapper.readValue(json, TestJson.class);
System.out.println("s1=" + bean.getS1());
System.out.println("s2=" + bean.getS2());
}
}
序列化运行良好并获得预期值{"s2":"test2"}
。
但是@JsonIgnore(false)
在二传手上似乎不起作用。
我预计:
s1=test1
s2=test2
但得到:
s1=null
s2=test2
我怎样才能让二传手在现场s1
工作?
解决方案
你可以@JsonProperty
使用JsonProperty.Access.WRITE_ONLY
访问设置,表示该属性只能被写(set)用于反序列化,而不会被读(get)在序列化时,即该属性的值不包含在序列化中。
public class TestJson {
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
private String s1;
private String s2;
public String getS1() {
return s1;
}
public void setS1(String s1) {
this.s1 = s1;
}
public String getS2() {
return s2;
}
public void setS2(String s2) {
this.s2 = s2;
}
}
这也应该有效
public class TestJson {
private String s1;
private String s2;
@JsonIgnore
public String getS1() {
return s1;
}
@JsonProperty
public void setS1(String s1) {
this.s1 = s1;
}
public String getS2() {
return s2;
}
public void setS2(String s2) {
this.s2 = s2;
}
}
推荐阅读
- android - 操作栏中的 Android 个人资料图片
- javascript - 使用 fetch API 与 PHP 的 CORS “SyntaxError: Unexpected end of input at”
- python-3.x - tensorflow 如何保持 l2_normalize 约束?
- office-js - Windows10 上的 Word 加载项本地侧载问题
- cron - 多个自定义 crontab 文件到一个主 crontab
- azure-aks - AKS 节点池升级失败,Azure 活动日志“操作超时,请重试”。
- python - IndexError:索引 6 超出轴 0 的范围,大小为 6
- android - 在 Android Webview 的 navigator.geolocation.getCurrentPosition() 中出现“位置信息不可用”错误
- c++ - 非 POD 的零初始化
- angular - 为什么在 Angular 中,在主组件 css 文件中导入全局 css 文件而不是在 styles.css 中导入它们之间存在很大差异