杰克逊:我怎么能忽略getter但解析setter? [复制]
Posted
技术标签:
【中文标题】杰克逊:我怎么能忽略getter但解析setter? [复制]【英文标题】:Jackson: how can I ignore getter but parse setter? [duplicate] 【发布时间】:2020-11-03 21:21:56 【问题描述】:我需要序列化一个没有给定字段的 bean,但反序列化带有该字段的 bean。我在 getter 上使用 @JsonIgnore
,在 setter 上使用 @JsonIgnore(false)
:
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"
。
但是 setter 上的 @JsonIgnore(false)
似乎不起作用。
我希望:
s1=test1
s2=test2
但是得到了:
s1=null
s2=test2
如何让s1
字段上的设置器工作?
【问题讨论】:
从setter方法中移除@JsonIgnore(false)
,你不需要它
@Deadpool ,但我需要用字段“s1”反序列化这个bean(即我需要杰克逊反序列化字段“s1”和“s2”)。无法删除 @JsonIgnore(false)
。
应该可以的,你试过了吗?以及任何错误信息?
@Deadpool ,我尝试使用com.fasterxml.jackson.core:jackson-databind:2.10.0
,总是得到s1=null \n s2=test2
(我期望s1=test1 \n s2=test2
)。您是否尝试过,您使用的是什么 Jackson 版本?
【参考方案1】:
您可以将@JsonProperty
与JsonProperty.Access.WRITE_ONLY
一起使用
from docs
访问设置,表示该属性只能被写(设置)用于反序列化,而不会被读(获取)在序列化时,即该属性的值不包含在序列化中。
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;
【讨论】:
以上是关于杰克逊:我怎么能忽略getter但解析setter? [复制]的主要内容,如果未能解决你的问题,请参考以下文章