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

 更新时间:2024年08月23日 09:18:47   作者:华妃  
这篇文章主要介绍了@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、此时返回前端的数据格式为

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java源码刨析之ArrayQueue

    Java源码刨析之ArrayQueue

    在本篇文章当中主要给大家介绍一个比较简单的JDK为我们提供的容器ArrayQueue,这个容器主要是用数组实现的一个单向队列,整体的结构相对其他容器来说就比较简单了
    2022-07-07
  • Java实现自定义枚举值校验器的示例代码

    Java实现自定义枚举值校验器的示例代码

    这篇文章主要为大家详细介绍了Java实现自定义枚举值校验器的相关资料,文中的示例代码讲解详细,具有一定的借鉴价值,需要的可以参考一下
    2023-02-02
  • Java编程实现生成给定范围内不重复随机数的方法小结

    Java编程实现生成给定范围内不重复随机数的方法小结

    这篇文章主要介绍了Java编程实现生成给定范围内不重复随机数的方法,结合实例形式总结分析了java基于数学运算与判断实现不重复随机数的生成功能,需要的朋友可以参考下
    2017-07-07
  • java实现日历应用程序设计

    java实现日历应用程序设计

    这篇文章主要为大家详细介绍了java实现日历应用程序设计,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-06-06
  • 一文详解如何在SpringMVC的视图中渲染模型数据

    一文详解如何在SpringMVC的视图中渲染模型数据

    SpringMVC是一个基于Spring框架的Web框架,它提供了一种方便的方式来处理 HTTP 请求和响应,在SpringMVC中,视图是用来渲染模型数据的组件,它们负责将模型数据转换为HTML、JSON、XML等格式的响应,在本文中,我们将讨论如何在SpringMVC中的视图中渲染模型数据
    2023-07-07
  • Java如何通过反射获取Constructor、Field、Method对象

    Java如何通过反射获取Constructor、Field、Method对象

    反射指的是对象的反向处理操作,根据对象取得对象的来源信息,在反射的世界里面,看重的不再是一个对象,而是对象身后的组成,下面这篇文章主要给大家介绍了关于Java如何通过反射获取Constructor、Field、Method对象的相关资料,需要的朋友可以参考下
    2022-06-06
  • Maven和MyBatis框架简单实现数据库交互的示例

    Maven和MyBatis框架简单实现数据库交互的示例

    本文主要介绍了Maven和MyBatis框架简单实现数据库交互的示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-01-01
  • java实现发送邮箱验证码

    java实现发送邮箱验证码

    这篇文章主要为大家详细介绍了java实现发送邮箱验证码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • java中&和&&的基本区别与常见的误用

    java中&和&&的基本区别与常见的误用

    & 和&&是Java中用于逻辑运算的两个运算符,&是按位与和逻辑与兼用的运算符,而&&仅用于逻辑与运算,并具有短路特性,这篇文章主要介绍了java中&和&&的基本区别与常见的误用,需要的朋友可以参考下
    2025-02-02
  • Mybatis-Plus 实战使用与最佳实践

    Mybatis-Plus 实战使用与最佳实践

    Mybatis作为优秀的持久层框架,以其灵活性和可控性赢得了广大开发者的青睐,本文将从实战角度出发,深入解析Mybatis-Plus的核心功能和最佳实践,帮助开发者快速掌握这一强大的开发工具,感兴趣的朋友跟随小编一起看看吧
    2025-10-10

最新评论