当前位置: 首页 > article >正文

自定义反序列化过程

需求:student对象中name属性,序列化时将该属性映射为stuname,反序列化时将 Json中的NAME键值对映射到name属性中

   @AllArgsConstructor
    @NoArgsConstructor
    @Getter
    @Setter
    static class Student {

        @JsonProperty("stuname")
        private List<String> name;

        @JsonProperty("age")
        private String age;

        @Override
        public String toString() {
            return "Student{" +
                    "name=" + name +
                    ", age='" + age + '\'' +
                    '}';
        }
    }
public class StudentDeserializer extends JsonDeserializer<Student> {
        @Override
        public Student deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
            // 自定义反序列化逻辑
            Student student = new Student();
            JsonNode node = p.getCodec().readTree(p);
            JsonNode namesNode = node.get("NAMES");
            ObjectMapper objectMapper = new ObjectMapper();
            List<String> names = objectMapper.convertValue(namesNode, objectMapper.getTypeFactory().constructCollectionType(List.class, String.class));
            JsonNode ageNode = node.get("age");
            String age = objectMapper.convertValue(ageNode, String.class);
            student.setName(names);
            student.setAge(age);
            return student;
        }
  @Test
    public void stuTest() throws IOException {
        ObjectMapper mapper = new ObjectMapper();
        // 创建一个Student对象并序列化为JSON
        Student student = new Student();
        student.setName(Arrays.asList("John Doe", "Jane Doe"));
        student.setAge("1");
        String jsonString = mapper.writeValueAsString(student);
        System.out.println("Serialized JSON: " + jsonString);

        // 反序列化JSON字符串为Student对象
        // 注意这里的JSON字符串中NAMES是一个数组
        String inputJson = "{\"NAMES\":[\"Alice\", \"Bob\"],\"age\":\"15\"}";
        // 在 ObjectMapper 上注册反序列化器
        SimpleModule module = new SimpleModule();
        module.addDeserializer(Student.class, new StudentDeserializer());
        mapper.registerModule(module);
        Student deserializedStudent = mapper.readValue(inputJson, Student.class);
        System.out.println("Deserialized Student: " + deserializedStudent);
    }


http://www.kler.cn/a/394378.html

相关文章:

  • TCP/IP 模型中,网络层对 IP 地址的分配与路由选择
  • dify的ChatFlow自定义上传图片并通过HTTP请求到SpringBoot后端
  • Yolo11改进策略:Head改进|DynamicHead,利用注意力机制统一目标检测头部|即插即用
  • 如何在centos系统上挂载U盘
  • 下载运行Vue开源项目vue-pure-admin
  • 四种自动化测试模型实例及优缺点详解
  • 【金猿人物展】罗格科技CTO崔鹏——数据驱动未来:从2024看2025大数据行业的变革与挑战...
  • shell 100例
  • STM32中断系统
  • 库存管理高效秘籍
  • ubuntu的dns设置问题
  • 从ROS Bag文件提取点云数据并保存为PCD格式进行处理 ros ubuntu
  • 15分钟学 Go 第 52 天 :发布与版本控制
  • 如何将Edge标签页设置得干净好用
  • Docker部署Nginx
  • 【C语言】计算3x3矩阵每行的最大值并存入第四列
  • 解密复杂系统:理论、模型与案例(3)
  • Fantasy中玩家断线的检测
  • C语言的内存函数
  • 【LeetCode】【算法】538. 把二叉搜索树转换为累加树
  • 【IC每日一题:IC常用模块--RR/handshake/gray2bin】
  • SSH是 struts+spring+hibernate集成框架
  • 政务数据治理专栏开搞!
  • 浏览器是加载ES6模块的?
  • 探秘 RPC:揭开远程过程调用的实现原理
  • QTcpSocket 服务端和客户端