欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

@JsonDeserialize和@JsonSerialize注解的使用方式,

来源: javaer 分享于  点击 30115 次 点评:201

@JsonDeserialize和@JsonSerialize注解的使用方式,


目录
  • 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 "";
        }
    }

    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<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);
        }
    }

    2、返回前端的vo对象如下图所示,其中其中模板背景期望为附件的Key和name对象集合,在该字段上增加了文件上传序列化注解。

    3、此时返回前端的数据格式为

    总结

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持3672js教程。

    您可能感兴趣的文章:
    • SpringBoot @JsonDeserialize自定义Json序列化方式
    • @JsonSerialize(using = LongToStringUtil.class)注解的使用方式
    • SpringBoot返回long,前端接收进度丢失,@JsonSerialize不生效问题
    • @JsonSerialize序列化注解的使用
    • @JsonSerialize注解的使用示例教程
    相关栏目:

    用户点评