zoukankan      html  css  js  c++  java
  • 使用Jackson,给对象字段序列化-反序列化设置别名

    1. 场景:

    我需要利用二维码携带对象的JSON化数据,然后供别的系统扫描读取,在使用过程中由于携带的数据量太大,导致二维码点阵过密,识别率下降。此时需要对二维码中的JSON数据进行精简处理,首先想到的就是将字段的key缩短,但是不能直接缩短对象的类字段名,这会导致类字段的可读性下降和连带修改多处代码的问题。

    事件证明,仅仅精简字段名称达到的效果十分有限,远远达不到内容缩减的要求;最后采用了gzip压缩json字符串的方案,完美

    1. 由于我使用的是Jackson库,它提供了@JsonProperty注解,可以在序列化过程中启用字段别名,并且在序列化和反序列化两个方向上都是对等的,简直不要太方便。
    2. 模型类定义:
    @Data
    public class Cat {
      @JsonProperty("fn") // 定义了一个更精简的别名
      public String firstName;
    }
    
    • 序列化:
    @GetMapping("/get")
    public Cat get() {
       Cat cat = new Cat();
       cat.setFirst_name("杨XX");
       return cat;
    }
    // 请求结果:{"fn": "杨XX"}
    
    • 反序列化:
    @PostMapping("/put")
    public Cat put(@RequestBody Cat cat) {
       return cat;
    }
    // 请求参数_0:{"firstName": "123"},后端成功解析。
    // 请求参数_1:{"fn": "456"},后端成功解析。
    

    结论:使用@jackson的JsonProperty注解,序列化能很好的使用别名替换真实字段,在反序列化过程中能同时支持别名和真名。

  • 相关阅读:
    rdesktop ERROR: CredSSP: Initialize failed, do you have correct kerberos tgt initialized ? Failed to connect, CredSSP required by server
    nginx 服务器重启命令,关闭
    Libvirt磁盘加密
    qemu-nbd使用教程
    交叉编译Spice-gtk
    通过Python调用Spice-gtk
    远程桌面连接KVM虚拟机
    虚拟创建失败之Dbus调试
    Libvirt代码架构
    Libvirt外部快照
  • 原文地址:https://www.cnblogs.com/JaxYoun/p/12533872.html
Copyright © 2011-2022 走看看