Jackson 自定义序列化 getter

use*_*152 4 java json jackson

假设我有一个像这样的 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();
     }


}
Run Code Online (Sandbox Code Playgroud)

我想制作一个条件序列化器,以便在满足某些条件时序列化与实际值不同的值。

我查看了@JsonGetter,但显然它已被弃用,@JsonProperty 似乎不起作用。

你有什么主意吗?

先感谢您 :)

mac*_*ias 10

当我这样使用 @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();
      }
}
Run Code Online (Sandbox Code Playgroud)

请参阅此处的测试示例。

如果您想将此大写逻辑与实体本身分开,您还可以使用自定义序列化程序,例如此处

然而,事实是这是一个业务逻辑,不应由序列化程序处理 - 这是设计失败。而是将用户名映射到其他地方并仅将 Jackson 用于序列化 - 这是该库的目的。