首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Jackson自定义序列化getter

Jackson自定义序列化getter
EN

Stack Overflow用户
提问于 2015-04-09 21:49:17
回答 2查看 7.9K关注 0票数 5

假设我有一个POJO,如下:

代码语言:javascript
复制
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似乎不起作用。

你有什么想法吗?

提前感谢您:)

EN

回答 2

Stack Overflow用户

发布于 2015-04-10 00:14:54

当我像这样使用@JsonProperty时,它实际上对我是有效的:

代码语言:javascript
复制
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仅用于序列化-这就是这个库的目的。

票数 10
EN

Stack Overflow用户

发布于 2015-04-09 23:36:48

您可以尝试编写自定义序列化程序,实现JsonSerializer并使用@JsonSerialize then:http://www.baeldung.com/jackson-custom-serialization

但这似乎有点过头了。

此外,如果可以接受,您可以尝试将getUpperUsername()的逻辑放入通常的getter中。

PS:奇怪的是@JsonProperty不工作,它在这里匹配。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29540396

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档