我有一个发送到服务器和从服务器发送的用户对象 . 当我发出用户对象时,我不想将散列密码发送给客户端 . 所以我在密码属性上添加了 @JsonIgnore
,但这也阻止了它被反序列化为密码,这使得用户在没有密码时很难注册 .
我怎样才能将 @JsonIgnore
应用于序列化而不是反序列化?我'm using Spring JSONView so I don'对 ObjectMapper
有很大的控制权 .
我试过的事情:
-
将
@JsonIgnore
添加到酒店 -
仅在getter方法上添加
@JsonIgnore
5 回答
究竟如何做到这一点取决于你正在使用的 Jackson 版本 . 这在版本1.9中发生了变化,在此之前,您可以通过将
@JsonIgnore
添加到getter来实现此目的 .你试过的:
执行此操作,并将JSON "password"字段名称的特定
@JsonProperty
注释添加到对象密码的setter方法中 .更新版本的Jackson为
JsonProperty
添加了READ_ONLY
和WRITE_ONLY
注释参数 . 所以你也可以这样做:可以找到文档here .
为了实现这一点,我们需要的只是两个注释:
@JsonIgnore
@JsonProperty
在类成员及其getter上使用
@JsonIgnore
. 在其setter上使用@JsonProperty
.示例说明将有助于执行此操作:
从版本2.6开始:更直观的方法是在字段上使用
com.fasterxml.jackson.annotation.JsonProperty
注释:即使存在getter,也会从序列化中排除字段值 .
JavaDoc说:
如果您需要反过来,只需使用
Access.READ_ONLY
.在我的情况下,我让Jackson自动序列化/反序列化我从Spring MVC控制器返回的对象(我在Spring 4.1.6中使用@RestController) . 我不得不使用
com.fasterxml.jackson.annotation.JsonIgnore
而不是org.codehaus.jackson.annotate.JsonIgnore
,否则它什么也没做 .