• @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、此时返回前端的数据格式为
    在这里插入图片描述

  • 相关阅读:
    前端框架大比拼:2022年的Vue与React谁更胜一筹?
    vite+vue3+ts中使用require.context | 报错require is not defined | 获取文件夹中的文件名
    可观测性-Event-指标事件采样策略总结
    快速解决mfc140u.dll丢失问题,找不到mfc140u.dll修复方法分享
    LCD智能婴幼儿秤pcba方案
    【DSPF8003x】 Enhanced Pulse Width Modulator (ePWM)
    模型部署——融合BN和Conv层
    jvm基础--JVM内存模型
    GlobalWebsoket.js 的使用,实现获取实时数据
    Vue3全家桶 - VueRouter - 【1】快速使用(创建路由模块 + 规定路由模式 + 使用路由规则 + RouterView-RouterLink)
  • 原文地址:https://blog.csdn.net/weixin_44792849/article/details/132717948