首页 > Java > java教程 > 正文

如何在 Jackson 中使用不同的属性名称进行序列化和反序列化?

Barbara Streisand
发布: 2024-10-26 06:30:30
原创
336 人浏览过

How to Use Different Property Names for Serialization and Deserialization in Jackson?

Jackson 中序列化和反序列化的不同属性名称

JSON 属性在序列化和反序列化期间可以有不同的名称吗? Jackson 库允许这种自定义。

例如,考虑一个坐标类:

<code class="java">class Coordinates {
  int red;
}</code>
登录后复制

从 JSON 反序列化时,您需要以下格式:

<code class="json">{
  "red": 12
}</code>
登录后复制

但是,在序列化过程中,它的格式应为:

<code class="json">{
  "r": 12
}</code>
登录后复制

使用 @JsonProperty 注解实现此功能无法按预期工作,因为 getter 和 setter 具有不同的名称:

<code class="java">class Coordinates {
    int red;

    @JsonProperty("r")
    public byte getRed() {
      return red;
    }

    @JsonProperty("red")
    public void setRed(byte red) {
      this.red = red;
    }
}</code>
登录后复制

这会导致“无法识别的字段“红色””异常。

要解决此问题,请为 getter 和 setter 使用不同的方法名称:

<code class="java">public class Coordinates {
    byte red;

    @JsonProperty("r")
    public byte getR() {
      return red;
    }

    @JsonProperty("red")
    public void setRed(byte red) {
      this.red = red;
    }
}</code>
登录后复制

这样,Jackson 会将属性识别为不同的字段,允许在序列化和反序列化过程中使用不同的名称。

例如:

<code class="java">Coordinates c = new Coordinates();
c.setRed((byte) 5);

ObjectMapper mapper = new ObjectMapper();
System.out.println("Serialization: " + mapper.writeValueAsString(c));

Coordinates r = mapper.readValue("{\"red\": 25}", Coordinates.class);
System.out.println("Deserialization: " + r.getR());</code>
登录后复制

打印:

Serialization: {"r": 5}
Deserialization: 25
登录后复制

以上是如何在 Jackson 中使用不同的属性名称进行序列化和反序列化?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!