假设我有一个POJO,如下:
public class User {
private Long id;
private String username;
// usual getters and setters
....
// only for serialisation purposes
public String getUpperUsername() {
return this.id % 2 == 0 ? username : username.toUpperCase();
}
}我想做一个有条件的序列化程序,这样如果满足一些条件,它会序列化一个不同于实际值的值。
我查看了@JsonGetter,但它显然已被弃用,@JsonProperty似乎不起作用。
你有什么想法吗?
提前感谢您:)
发布于 2015-04-10 00:14:54
当我像这样使用@JsonProperty时,它实际上对我是有效的:
public class User {
private Long id;
private String username;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
@JsonProperty("username")
public String getUppercaseUsername() {
return this.id % 2 == 0 ? username : username.toUpperCase();
}
}请参阅测试示例here。
如果你想把这个大写逻辑从实体本身中分离出来,你也可以使用一个定制的序列化程序,比如here。
然而,事实是,这是一个业务逻辑,不应该由序列化程序处理-这是一个设计失败。相反,将用户名映射到其他地方,并使用Jackson仅用于序列化-这就是这个库的目的。
发布于 2015-04-09 23:36:48
您可以尝试编写自定义序列化程序,实现JsonSerializer并使用@JsonSerialize then:http://www.baeldung.com/jackson-custom-serialization
但这似乎有点过头了。
此外,如果可以接受,您可以尝试将getUpperUsername()的逻辑放入通常的getter中。
PS:奇怪的是@JsonProperty不工作,它在这里匹配。
https://stackoverflow.com/questions/29540396
复制相似问题