我们说我有一个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似乎无法工作。
你有什么想法吗?
提前谢谢你:)
答案 0 :(得分:4)
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进行序列化 - 这是该库的目的。
答案 1 :(得分:2)
您可以尝试编写实现JsonSerializer的自定义序列化程序并使用@JsonSerialize:http://www.baeldung.com/jackson-custom-serialization
但这似乎有点矫枉过正。
另外,如果可以接受,你可以尝试将getUpperUsername()的逻辑放在通常的getter中。
PS:奇怪的是@JsonProperty不起作用,它在这里匹配。