记录java枚举类在数据库、前后端交互时的序列化方式

news2024/11/23 12:05:23

实体类枚举属性持久化到数据库

1.@EnumValue
2.配置
mybatis-plus:configuration:default-enum-type-handler: com.baomidou.mybatisplus.core.handlers.MybatisEnumTypeHandler

mybatis-plus:typeEnumsPackage: xxx
实体类中枚举属性自动转为@EnumValue标记的属性值

从数据库查实体类枚举属性

1.@EnumValue
2.配置mybatis-plus:configuration:default-enum-type-handler: com.baomidou.mybatisplus.core.handlers.MybatisEnumTypeHandler

mybatis-plus:typeEnumsPackage: xxx
数据库中属性值,自动转换为实体类中的枚举属性(对象)
在这里插入图片描述

前端请求接口返回实体(包含枚举属性)

@JsonSerialize(using = ToStringSerializer.class)
实体类的枚举属性序列化为toString方法,可自定义返回json,如:
{ "code": 0, "msg": null, "data": { "id": null, "testEnum": "{code:1, desc:'a'}" } }

前端通过json传枚举值到接口中自动转换为实体的枚举类属性对象

@RequestBody TestEnumEntity testEnumEntity
@JsonDeserialize(using = BaseEnumDeserializer.class)

附上代码:

  • 枚举公共接口
    在这里插入图片描述
  • 枚举
    在这里插入图片描述
  • 实体类
    在这里插入图片描述
  • 枚举反序列化器
public class BaseEnumDeserializer extends JsonDeserializer {

    @Override
    public Object deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException {
        JsonNode value = jsonParser.getCodec().readTree(jsonParser);
        String currentName = jsonParser.currentName();
        Object currentValue = jsonParser.getCurrentValue();
        Class findPropertyType = BeanUtils.findPropertyType(currentName, currentValue.getClass());
        if (findPropertyType.isEnum()) {
            BaseEnum[] enumConstants = (BaseEnum[]) findPropertyType.getEnumConstants();
            for (BaseEnum e : enumConstants) {
                if (e.getValue().toString().equals(value.asText())) {
                    return e;
                }
            }
        }
        return null;
    }
}
  • 测试接口
@Slf4j
@RestController
@RequestMapping("/test/enum")
public class TestEnumController {

    @Autowired
    TestEnumEntityMapper testEnumEntityMapper;

    @RequestMapping("/save")
    public R<String> save() {
        TestEnumEntity testEnumEntity = new TestEnumEntity();
        testEnumEntity.setTestEnum(TestEnum.A);
        int insert = testEnumEntityMapper.insert(testEnumEntity);
        return R.ok("insert:" + insert);
    }

    @RequestMapping("/get")
    public R<String> get() {
        TestEnumEntity testEnumEntity = testEnumEntityMapper.selectById(1603210329657991170L);
        return R.ok("get:" + testEnumEntity.toString());
    }

    @RequestMapping("/queryWrapper")
    public R queryWrapper() {
        LambdaQueryWrapper<TestEnumEntity> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(TestEnumEntity::getTestEnum, TestEnum.A);
        return R.ok(testEnumEntityMapper.selectList(wrapper));
    }

    @RequestMapping("/querySql")
    public R querySql() {
//        return R.ok(testEnumEntityMapper.selectByEnumCode(TestEnum.A));//ok
        TestEnumEntity testEnumEntity = new TestEnumEntity();
        testEnumEntity.setTestEnum(TestEnum.B);
        return R.ok(testEnumEntityMapper.selectByEntity(testEnumEntity));//OK
    }

    @RequestMapping("/getEnum")
    public R<TestEnumEntity> getEnum() {
        TestEnumEntity testEnumEntity = new TestEnumEntity();
        testEnumEntity.setTestEnum(TestEnum.A);
        return R.ok(testEnumEntity);
    }

    @RequestMapping("/saveEnum")
    public R saveEnum(@RequestBody TestEnumEntity testEnumEntity) {
        System.out.println(testEnumEntity);
        return R.ok(testEnumEntity);
    }

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/101615.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++数学与算法系列之排列和组合

1. 前言 本文将聊聊排列和组合&#xff0c;排列组合是组合学最基本的概念&#xff0c;在程序运用中也至关重要。 排列问题&#xff1a;指从给定个数的元素中取出指定个数的元素进行排序。 组合问题&#xff1a;指从给定个数的元素中仅仅取出指定个数的元素&#xff0c;不排序…

Docker镜像

镜像是一种轻量级、可执行的独立软件包&#xff0c;它包含运行某个软件所需的所有内容&#xff0c;我们把应用程序和配置依赖打包好形成一个可交付的运行环境(包括代码、运行时需要的库、环境变量和配置文件等)&#xff0c;这个打包好的运行环境就是image镜像文件。 只有通过这…

【设计模式】工厂方法模式Factory(Java)

文章目录1. 定义2. 类图3. Java实现案例3.1 抽象类&#xff1a;Pizza和PizzaStore3.2 具体披萨&#xff1a;北京两种上海两种共四种3.3 具体披萨店&#xff1a;北京店和上海店3.4 测试主方法1. 定义 工厂方法模式定义了一个创建对象的接口&#xff0c;但由子类决定要实例化的类…

基于JAVA的XX公司固定资产管理系统的设计与实现

开发工具(eclipse/idea/vscode等)&#xff1a; 数据库(sqlite/mysql/sqlserver等)&#xff1a; 功能模块(请用文字描述&#xff0c;至少200字)&#xff1a; 本课题研究对象是中小企业财务管理系统&#xff0c;设计采用自己开发实践和所学知 识&#xff0c;系统部分主要分为以下…

汽车主机厂Adams/Car悬架动力学开发最全攻略

​​​​​​​一、写在前面 实际经历告诉我们&#xff0c;当我们接触一个新事物或学习一项新的技能时&#xff0c;入门往往是最为困难的&#xff0c;迷茫、彷徨、无助…… 正是基于同样的经历&#xff0c;在掌握Adams/Car软件的应用后&#xff0c;作者即开始构思如何将自己的…

论文投稿指南——中文核心期刊推荐(电工技术)

【前言】 &#x1f680; 想发论文怎么办&#xff1f;手把手教你论文如何投稿&#xff01;那么&#xff0c;首先要搞懂投稿目标——论文期刊 &#x1f384; 在期刊论文的分布中&#xff0c;存在一种普遍现象&#xff1a;即对于某一特定的学科或专业来说&#xff0c;少数期刊所含…

linux后台自定义后台服务service(已filebeat举例)

文章目录一、配置攥写1&#xff09;安装filebeat和配置相关修改2&#xff09;常用命令二、启动顺序1&#xff09;命令循序2&#xff09;systemctl添加自定义系统服务&#xff08;服务填写指南&#xff09;3&#xff09;linux的systemctl命令详解及使用教程三、遇到的坑点和报错…

One-Hot 独热编码

1. 什么是独热编码 独热编码&#xff0c;又称一位有效编码。采用N位状态寄存器来对N个状态进行编码&#xff0c;直观来说就是有多少个状态就有多少比特&#xff0c;除了有效的比特为1外&#xff0c;其他都为0. 2. 独热编码过程 &#xff08;1&#xff09;将分类值映射到整数…

Simulcast与SVN

什么是Simulcast: 一个客户端向服务器发送高清&#xff0c;标清&#xff0c;低清三种视频流&#xff0c;服务器根据其他接收客户端的带宽情况分发不同的视频流。Simulcast不仅有客户端的工作&#xff0c;还有服务器的工作。 开启Simulcast的三种方式: Munging SDP方式 添加assr…

网络实验①——同Vlan下相互通信

实验要求&#xff1a; pc0与pc1互通pc2与pc3互通实验步骤&#xff1a; A交换机配置&#xff1a; enable config t hostname switch-A vlan 10 vlan 20 exit interface f0/1 switch access vlan 10 no shutdown interface f0/2 switch access vlan 20 no shutdown interface f0/…

无线耳机哪个品牌好一点?真无线蓝牙耳机推荐品牌

蓝牙耳机随着近几年的快速发展&#xff0c;已经成为了人们外出时必不可少的数码产品之一。而现如今&#xff0c;市面上的蓝牙耳机品牌众多&#xff0c;挑选起来让人眼花缭乱&#xff0c;人们在选择时不免陷入纠结。那么&#xff0c;无线耳机哪个品牌好一点&#xff1f;下面&…

day23【代码随想录】翻转二叉树、对称二叉树、相同的树、另一棵树的子树、完全二叉树的结点个数

文章目录前言一、翻转二叉树&#xff08;力扣226&#xff09;1、递归法1、使用前序遍历2、使用后序遍历2、迭代法1、层序遍历二、对称二叉树&#xff08;力扣101&#xff09;三、相同的树&#xff08;力扣100&#xff09;四、另一棵树的子树&#xff08;力扣572&#xff09;五、…

[附源码]Nodejs计算机毕业设计教师信息采集系统Express(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置&#xff1a; Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分…

docker容器中DPDK对网卡SR-IOV支持实验

主要是验证下容器运行DPDK&#xff0c;如何对SR-IOV进行支持 1 VF创建方法 在未开启SR-IOV时&#xff0c;通过DPDK提供的./dpdk-devbind.py脚本可知&#xff0c;当前系统一共有一块82599网卡&#xff0c;拥有2个网口&#xff0c;PCI的地址是18:00.0和18:00.1,如下图所示 启用…

华为配置动态路由ISIS协议

华为配置动态路由ISIS协议一、路由基础知识二、路由器配置接口IP地址&#xff08;一&#xff09;配置R1、R2、R3网络&#xff08;二&#xff09;配置R1、R2、R3环回网络接口&#xff08;三&#xff09;测试直连网络三、启动进程号&#xff0c;配置实体名称&#xff08;一&#…

JVM之堆

堆的基本内容&#xff1a; Java堆&#xff08;Java Heap&#xff09;是虚拟机所管理的内存中最大的一块&#xff0c;Java堆是被所有线程共享的一块内存区域&#xff0c;在虚拟机启动时创建&#xff0c;此内存区域的唯一目的就是存放对象实例&#xff0c;Java 世界里“几乎”所…

【每日挠头算法题】Leetcode 989. 数组形式的整数加法 —— 高精度加法解法

&#x1f451;作者主页&#xff1a;进击的安度因 &#x1f3e0;学习社区&#xff1a;进击的安度因&#xff08;个人社区&#xff09; &#x1f4d6;专栏链接&#xff1a;每日挠头算法题 文章目录一、题目描述二、思路及代码实现今天为大家带来的是力扣上的一道简单题&#xff1…

Spring的秒表StopWatch优雅的程序计时器 -第455篇

历史文章&#xff08;文章累计450&#xff09; 《国内最全的Spring Boot系列之一》 《国内最全的Spring Boot系列之二》 《国内最全的Spring Boot系列之三》 《国内最全的Spring Boot系列之四》 《国内最全的Spring Boot系列之五》 走进MyBatis源码一探Spring扩展点「知识…

排水监测传感器数据采集传感节点接入网关产品介绍

一、产品概述 传感节点接入网关是一款工业级网关&#xff0c;可将Modbus RTU协议的设备数据转换为MQTT协议格式再远传至数据中心&#xff0c;支持采集数字量输入信号&#xff0c;支持输出数字量控制信号。 传感节点接入网关具备一体化采集、传输、控制功能&#xff0c;集成了…

IDEA自定义JavaDOC注释模板

文章目录IDEA自定义JavaDOC注释模板方法注释模板1、创建模板2、设置模板内容-JavaDoc格式3、Define4、Edit VariablesIDEA自定义JavaDOC注释模板 JavaDOC注释模板共分为两种&#xff1a; 类注释模板方法注释模板 方法注释模板 1、创建模板 File–>Settings–>Editor…