• @JsonDeserialize和@JsonSerialize注解的使用


    JsonDeserialize注解介绍

    @JsonDeserialize:json反序列化注解,作用于setter()方法,将json数据反序列化为java对象。可以理解为用在处理接收的数据上。

    使用场景

    前端传递的参数与后端实际接收的参数不一致时,可以通过反序列化注解处理。(比如将前端传递的主键集合转换成用逗号分隔的字符串)

    使用示例

    假如前端页面中选择多条数据,会向后端传递选中的数据对象集合,但是后端期望存储选中的多个数据id用逗号分隔,此时可以用反序列注解。
    1、自定义反序列化的方式

    public class CheckedStringDeserializer extends JsonDeserializer<String> {
    
        @Override
        public String deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
            final List<Map<String, String>> list = p.getCodec().readValue(p, new TypeReference<List<Map<String, String>>>() {
            });
            if (CollUtil.isNotEmpty(list)) {
                final ArrayList<String> objects = new ArrayList<>(list.size());
                list.forEach(e -> objects.add(e.get("id")));
                return CollUtil.join(objects, ",");
            }
            return "";
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    2、后端接收参数的dto如下图所示,其中临时党支部人员Id接收的是String类型,增加了该反序列化注解。
    在这里插入图片描述
    3、前端传递参数如下图所示:
    在这里插入图片描述

    4、后端实际接收到的参数如图所示:

    在这里插入图片描述

    @JsonSerialize注解

    @JsonSerialize:json序列化注解,作用于getter()方法,将java对象序列化为json数据。可以理解为用在处理返回的数据上

    使用场景

    后端返回前端的参数与前端期望的参数不一致时,可以用个序列化注解处理。(比如数据脱敏、数据格式处理等)

    使用示例

    假如后端存储附件、图片或者其他文件时,只存了文件key,此时前端反显需要将数据放在list中回显。
    1、自定义序列化处理方式

    public class FileUploadSeserializer extends JsonSerializer<String> {
    
        @Override
        public void serialize(String value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
            //将string转为List>格式
            Map<String,String> map = new HashMap<>(2);
            List<Map<String,String>> list = new ArrayList<>(1);
            map.put("key", value);
            map.put("name",value);
            list.add(map);
            gen.writeObject(list);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    2、返回前端的vo对象如下图所示,其中其中模板背景期望为附件的Key和name对象集合,在该字段上增加了文件上传序列化注解。
    在这里插入图片描述
    3、此时返回前端的数据格式为
    在这里插入图片描述

  • 相关阅读:
    Java“牵手”唯品会商品列表页数据采集+唯品会商品价格数据排序,唯品会API接口申请指南
    最新版:RadSystems Studio:Crack
    【微信小程序】wxml、wxss、js、json文件介绍
    主谓一致基本语法
    RocketMQ——MQ基础知识
    range函数
    倒计时1天 | 图技术如何赋能产业互联网创新?
    解决“error #147 declaration is incompatible with xxx xxx (declared at line xx)”问题
    解密键盘输入:探索设备控制器的奥秘
    MySQL 常用函数
  • 原文地址:https://blog.csdn.net/weixin_44792849/article/details/132717948