wee*_*ens 157 java json jackson
我有一个带密码字段的实体类:
class User {
private String password;
//setter, getter..
}
Run Code Online (Sandbox Code Playgroud)
我希望在序列化期间跳过此字段.但它应该仍然能够反序列化.这是必需的,以便客户端可以向我发送新密码,但无法读取当前密码.
我如何与杰克逊完成这项任务?
Bij*_*men 179
您可以将其标记为@JsonIgnore.
使用1.9,您可以为setter 添加@JsonIgnoregetter @JsonProperty,以使其反序列化但不能序列化.
小智 94
说明StaxMan所说的内容,这对我有用
private String password;
@JsonIgnore
public String getPassword() {
return password;
}
@JsonProperty
public void setPassword(String password) {
this.password = password;
}
Run Code Online (Sandbox Code Playgroud)
小智 35
简单的方法是注释你的getter和setter.
以下是修改后的原始示例以排除纯文本密码,但随后注释一个只将密码字段作为加密文本返回的新方法.
class User {
private String password;
public void setPassword(String password) {
this.password = password;
}
@JsonIgnore
public String getPassword() {
return password;
}
@JsonProperty("password")
public String getEncryptedPassword() {
// encryption logic
}
}
Run Code Online (Sandbox Code Playgroud)
Fra*_*eau 16
从Jackson 2.6开始,可以将属性标记为只读或只写.它比攻击两个访问器上的注释更简单,并将所有信息保存在一个地方:
public class User {
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
private String password;
}
Run Code Online (Sandbox Code Playgroud)
max*_*yme 10
transient对我来说是解决方案.谢谢!它是Java原生的,可以避免添加另一个特定于框架的注释.
Jackson有一个名为SimpleBeanPropertyFilter的类,帮助在序列化和反序列化过程中过滤字段;不是全球性的。我想这就是你想要的。
@JsonFilter("custom_serializer")
class User {
private String password;
//setter, getter..
}
Run Code Online (Sandbox Code Playgroud)
然后在你的代码中:
String[] fieldsToSkip = new String[] { "password" };
ObjectMapper mapper = new ObjectMapper();
final SimpleFilterProvider filter = new SimpleFilterProvider();
filter.addFilter("custom_serializer",
SimpleBeanPropertyFilter.serializeAllExcept(fieldsToSkip));
mapper.setFilters(filter);
String jsonStr = mapper.writeValueAsString(currentUser);
Run Code Online (Sandbox Code Playgroud)
这将防止password字段被序列化。您还可以按password原样反序列化字段。只需确保没有对 ObjectMapper 对象应用任何过滤器即可。
ObjectMapper mapper = new ObjectMapper();
User user = mapper.readValue(yourJsonStr, User.class); // user object does have non-null password field
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
122306 次 |
| 最近记录: |