[AIGC] 自定义Spring Boot中BigDecimal的序列化方式
在很多场景下,我们需要对BigDecimal类型的数据进行特殊处理,比如保留三位小数。Spring Boot使用Jackson作为默认的JSON序列化工具,我们可以通过自定义Jackson的序列化器(Serializer)来实现,下面将详细介绍实现步骤。
文章目录
- 1. 创建一个自定义序列化类
- 2. 在需要的字段上使用注解
- 3. 测试
- 全局生效的配置方式
1. 创建一个自定义序列化类
首先,我们需要创建一个自定义序列化器类,这个类需要继承com.fasterxml.jackson.databind.JsonSerializer<T>
这个类,并重写serialize
方法。
这个方法的作用就是告诉Jackson如何将Java对象转换为JSON。
创建一个类,我们可以将其命名为CustomBigDecimalSerialize
, 修改如下:
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import java.io.IOException;
import java.math.BigDecimal;public class CustomBigDecimalSerializer extends JsonSerializer<BigDecimal> {@Overridepublic void serialize(BigDecimal value, JsonGenerator gen, SerializerProvider serializers) throws IOException {if (value != null) {// 将BigDecimal保留3位小数,注意需要四舍五入BigDecimal decimal = value.setScale(3, BigDecimal.ROUND_HALF_UP);gen.writeNumber(decimal);}}
}
上述代码中,gen.writeNumber(decimal)
就是将处理后的数据写入JSON中。
2. 在需要的字段上使用注解
我们需要在对应的BigDecimal字段上使用@JsonIgnore注解,来告诉Jackson使用这个新的序列化器,代码如下:
import com.fasterxml.jackson.databind.annotation.JsonSerialize;public class ExampleEntity {@JsonSerialize(using = CustomBigDecimalSerializer.class)private BigDecimal number;// getters and setters...
}
这样一来,每当Jackson试图将这个类实例化为JSON时,它就会使用我们刚刚创建的CustomBigDecimalSerializer进行处理。
3. 测试
我们可以通过一个简单的Controller来进行测试:
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletResponse;
import java.math.BigDecimal;@RestController
@RequestMapping("/api")
public class TestController {@GetMapping("/test")public ExampleEntity test() {ExampleEntity exampleEntity = new ExampleEntity();exampleEntity.setNumber(new BigDecimal("123.45678"));return exampleEntity;}
}
运行项目,访问"http://localhost:8080/api/test",可以看见返回的json串中BigDecimal类型的number字段已经被处理为保留3位小数的格式。
以上就是自定义Spring Boot中BigDecimal的序列化方式的完整过程,通过自定义的序列化器,我们可以灵活地控制序列化的过程,满足各种各样的需求。
全局生效的配置方式
确实,您可以通过自定义Jackson ObjectMapper
或Module
,将此序列化器全局应用到所有的BigDecimal
字段。
以下是实现步骤:
- 创建一个配置类
@Configuration
public class JacksonConfig {
}
- 在配置类中,定义并配置一个
ObjectMapper
Bean:
@Bean
public ObjectMapper objectMapper(){ObjectMapper mapper = new ObjectMapper();SimpleModule module = new SimpleModule();module.addSerializer(BigDecimal.class, new CustomBigDecimalSerializer());mapper.registerModule(module);return mapper;
}
SimpleModule
是Jackson中的一个功能,它可以让我们将自定义的序列化器加入到ObjectMapper
中。如上,我们创建了一个新的SimpleModule
,然后通过 addSerializer
方法添加了我们自定义的BigDecimal
序列化器,最后将这个模块注册到ObjectMapper
中。
这样,Jackson在序列化BigDecimal
字段时,将全局使用我们自定义的序列化器。
需要注意的是,@Bean
注解的ObjectMapper
将覆盖Spring Boot的默认ObjectMapper
,这意味着所有Jackson的自动配置都将失效,您需要自行配置,或者使用Jackson2ObjectMapperBuilder
来保留Spring Boot的自动配置:
@Bean
public ObjectMapper objectMapper(Jackson2ObjectMapperBuilder builder){ObjectMapper mapper = builder.createXmlMapper(false).build();SimpleModule module = new SimpleModule();module.addSerializer(BigDecimal.class, new CustomBigDecimalSerializer());mapper.registerModule(module);return mapper;
}
以上,就是如何将自定义的BigDecimal序列化器全局配置到Spring Boot项目中的所有BigDecimal字段。
相关文章:
[AIGC] 自定义Spring Boot中BigDecimal的序列化方式
在很多场景下,我们需要对BigDecimal类型的数据进行特殊处理,比如保留三位小数。Spring Boot使用Jackson作为默认的JSON序列化工具,我们可以通过自定义Jackson的序列化器(Serializer)来实现,下面将详细介绍实…...
ubuntu20.04设置文件开机自启动
硬件:树霉派4B 系统:ubuntu20.04 在ubuntu20.04上经常需要运行 ./BluetoothServerParse_L.c ,比较繁琐,想要设置开机自启动,让树霉派4B在接上电源之后就自动运行该程序。使用systemd服务,设置步骤如下: &…...
盛水最多的容器
class Solution { public:int maxArea(vector<int>& height) {int l0,rheight.size()-1;int ans0;while(l<r){int areamin(height[l],height[r])*(r-l);ansmax(area,ans);if(height[l]<height[r]){l;}else{--r;}}return ans;} };...
PCIe——学习计划
学习计划 第1周:基础知识和总览 目标:了解计算机架构基础,总线系统概述以及 PCIe 的基础知识。内容: 计算机体系结构基础总线系统概述PCIe 的发展历史和基本概念 第2-3周:PCIe 体系结构 目标:理解 PCI…...
使用 TinyEngine 低代码引擎实现三方物料集成
本文由体验技术团队 TinyEngine 项目成员炽凌创作,欢迎大家实操体验,本体验内容基于 TinyEngine 低代码引擎提供的环境,介绍了如何通过 TinyEngine 低代码引擎实现三方物料集成,帮助开发者快速开发。 知识背景 1.1 TinyEngine 低…...
武汉理工大学云计算与服务计算——7.容器技术习题
1.容器的概念及与虚拟机的区别。 容器是一种轻量级的操作系统层面的虚拟化技术,它为应用软件及其依赖组件提供一个独立的运行环境,与其他容器和宿主机环境隔离。容器共享宿主机的操作系统内核,无需为每个容器单独安装操作系统&am…...
idea项目启动报错org/springframework/cloud/client/circuitbreaker/Customizer
文章目录 报错 java.lang.IllegalStateException: Error processing condition on org.springframework.cloud.client.CommonsClientAutoConfiguration$DiscoveryLoadBalancerConfiguration.discoveryCompositeHealthContributor继续报错 Caused by: java.lang.NoClassDefFound…...
贪 吃 蛇
简介 简易贪吃蛇,使用 javax.swing 组件构建游戏界面,通过监听键盘按键实现游戏操纵。 功能设计 按1 - 开始游戏按2 - 重新开始按3 - 暂停/继续按Esc-退出游戏统计吃到的苹果个数(得分)难度控制,得分超过阈值时难度…...
多人中招!企业裁员前的十大征兆!
(1)公司业绩下滑: 增长放缓:企业业绩增速放缓,低于行业平均水平。 如果公司的业绩增长慢下来了,甚至比不上同行业的其他公司,那就得小心了。利润也开始下滑,成本却不断上升&#x…...
R语言:使用 tidyr 进行数据整理
在数据分析和处理的过程中,数据整理是一项至关重要的任务。R 语言中的 tidyr 包提供了一组强大的函数,用于将数据转换为更易于分析的格式。tidyr 包的设计准则如下: 每个变量都有自己的列。每个观察值都有自己的行。每个值都有自己的单元格。…...
帝国CMS火车头采集发布模块详细使用方法
火车头采集文章数据发布到帝国CMS系统操作步骤如下: 1. 下载火车头采集帝国cms发布模块:帝国cms发布模块接口下载地址(免登录)-CSDN ; 2. 帝国cms发布模块导入火车头采集软件; 3. 填写帝国cms数据库中相…...
Unity 数据存储
在Unity中,资源的存储是非常重要的,所以了解资源的存储方式是有必要的,接下来说明一个重要的部分。 1.Unity存储 Unity为我们提供了自带的永久存储方式,PlayerPrefs,使用方法可以参考我这篇文章..点击导航 当然&…...
Doris 少数SQL在Datagrip无法执行,而在DorisUI或程序调用可以执行的问题
问题:Doris 少数SQL在Datagrip无法执行,而在DorisUI或程序调用可以执行 解决:Datagrip 执行SQL切分异常,设置默认执行语句方式,将分句改为整句执行 但是 支持多SQL批量分开执行更好用...
若依RuoYi-Vue分离版—配置多数据源
若依RuoYi-Vue分离版—配置多数据源 一、修改application-druid.yml二、修改pom文件,引入依赖第一种:下载jar包到本地,然后引入(我这边用的是这种)本地引入的,打包时需要加上配置 第二种:从远程…...
电子科技大学卓中卓二轮——分析笔记
1. 子系统的关键工作原理 在Linux子系统(Subsystem for Linux, 简称WSL)中,API(应用程序编程接口)的转换和映射是一个关键过程,目的是让Windows应用程序能够与Linux环境中的系统调用无缝交互。WSL使用了名…...
代码随想录算法训练营第三十五天|1005.K次取反后最大化的数组和 134. 加油站 135. 分发糖果
LeetCode 1005.K次取反后最大化的数组和 题目链接:1005.K次取反后最大化的数组和 踩坑:没有 思路:数组里有正有负,肯定先对负数进行取反,且从小开始。如果所有负数都为正后还可以取反,则如果此时次数为奇…...
鸿蒙开发HarmonyOS Next 网络框架retrofit 封装 viemodel使用
新手刚开始学习harmonyos开发,之前搞安卓开发习惯使用retrofit,结果在三方库中还真搜到了,然后就模拟学习一下。有不对的地方请指点一下。新手新手 oh-package.json5 引入库 retofit 需要使用2.0.1-rc.0 以上版本,修复了retrofit发送网络请…...
什么是SpringMVC
StringMvc简介 Spring web mvc和Struts2都属于表现层的框架,它是Spring框架的一部分,我们可以从Spring的整体结构中看得出来:...
【PowerDesigner】PDM生成建表脚本
目录 🌊1. PowerDesigner简介 🌍1.1 常用模型文件 🌍1.2 PowerDesigner使用环境 🌊2. PDM生成建表脚本 🌊3. 研究心得 🌊1. PowerDesigner简介 🌍1.1 常用模型文件 主要使用PowerDesigne…...
React实现在线预览word报告/本地选择报告预览
标题使用的核心技术点是docx-preview,读取到文件的File对象,用File去做文件展示,这里是才用将文件转base64字符串存储到localStorage中 在线预览word报告且包含word样式 下载需要使用的min.js文件进项目的public目录中(上zip已包…...
计算机哈佛架构、冯·诺依曼架构对比
哈佛架构和冯诺依曼架构是两种不同的计算机系统架构,它们在存储器组织方式上有着显著的区别。下面是它们的原理、优缺点的对比以及一些常见的 MCU 采用的架构: 哈佛架构: 原理:哈佛架构将指令存储器(程序存储器&#x…...
单片机串口发送为空中断和发送完成中断有什么区别?
单片机串口发送的空中断和发送完成中断在触发条件和功能上存在明显的区别。以下是关于这两种中断的详细解释: 【发送为空】中断(Transmit Data Register Empty Interrupt): 触发条件:当发送数据寄存器(TDR…...
css特效:对多个tag标签实现模拟地球仪特效
要实现对多个<a>标签(比如链接)的模拟地球仪特效和鼠标跟随特效,你可以使用CSS和一点点JavaScript来完成。下面是一个基本的示例代码:HTML代码: <!DOCTYPE html> <html lang"en"> <h…...
【2024Python教程】Python文件打包成exe,如果有图片怎么打包?有手就会的超简单教程
目录 pyinstaller模块打包exe(无图片或其他文件打包版) 第一步 安装pyinstaller模块: 第二步 找到需要打包的主程序文件夹 第三步 打包exe文件 第四步 确认exe文件是否可以打开 pyinstaller模块打包exe(有图片打包版--方法一…...
mac环境基于llama3和metaGPT自动开发2048游戏
1.准备虚拟环境 conda create -n metagpt python3.9 && conda activate metagpt 2.安装metagpt pip install --upgrade metagpt 3.初始化配置文件 metagpt --init-config 4. 安装llama3 5. 修改配置文件 6.让metegpt自动开发2048游戏 7.经过多轮迭代,最终…...
这些Linux知识可不是靠背就会的!
在信息技术日新月异的今天,Linux以其开源、稳定、高效的特性,逐渐成为了众多专业人士的首选操作系统。然而,关于Linux知识的学习,却常常陷入一个误区——许多人认为,掌握Linux就是死记硬背各种命令和参数。这种观念&am…...
openlayers 绘图功能,绘制多边形,draw组件的使用,一个简单的需求引发的思考(一)
1 需求 使用openlayers绘图功能绘制多边形 2 分析 主要是openlayers中draw功能的使用,感觉比较简单,祖传CV大法搞起来 3 实现 为了方便,就不加载底图了,直接使用绘制功能 2.1 简单实现 <template><div id"ma…...
【Flutter】 TextField限制长度时, 第三方手写输入法、ios原始拼音输入法输入被吞问题
问题描述 TextField限制长度时, 当你的输入字符长度已经到了最大值-1时,使用第三方手写输入法或者ios原生拼音输入法输入liang(什么拼音都行,这里只是举例),输到i那么li都会消失。 原因分析 这是因为第三…...
快递一键查询,只需快递单号,轻松掌握全程物流信息,让您的包裹追踪无忧!
在快节奏的现代生活中,快递已经成为我们生活中不可或缺的一部分。无论是网购的宝贝、亲朋好友寄来的礼物,还是工作中的紧急文件,快递都承载着我们的期待和需要。然而,面对众多的快递公司和复杂的查询流程,如何快速、准…...
【Java探索之旅】继承结构 继承和组合 protected final
文章目录 📑前言一、继承1.1 继承关系的代码块1.2 protected关键字1.3 继承方式1.4 final关键字1.5 继承与组合 🌤️全篇总结 📑前言 在面向对象编程中,继承是一种重要的概念,它允许我们创建一个新类,从现有…...
wordpress+最新版本/北京网站seo招聘
题目解决代码及点评 /************************************************************************/ /* 15. 有 N个国家名,要求按字母先后顺序排列(用起泡排序法)后输出*/ /***************************…...
遵义营商环境建设局网站/seo系统培训班
申明:该安装方式是实体用户 假设用户名为jim,其目录为/home/jimuseradd -d /home/jim jimpasswd jim下载vsftpd-2.3.2.tar.gz,解压。里面有一个INSTALL文件,一定要读。useradd nobody (可能会提示已经存在)…...
中国电信新建网站备案管理系统 录完信息/百度影音在线电影
接上一篇 SpringBoot整合RabbitMQ消息发布确认(二) 生产者获得了对无法投递消息的感知能力,能够在生产者的消息无法被投递时发现并处理。但有时候,我们并不知道该如何处理这些无法路由的消息,最多打个日志,然后触发报警ÿ…...
河北网站备案手机号码短信核验/seo国外推广软件
你再主动一点点 我们就有故事了简介curl 是常用的命令行工具,用来请求 Web 服务器。它的名字就是客户端(client)的 URL 工具的意思。它的功能非常强大,命令行参数多达几十种。如果熟练的话,完全可以取代 Postman 这一类的图形界面工具。本文…...
2014做网站/最好的bt磁力搜索引擎
引用格式:刘振彬,危双丰,庞帆,等.基于单目及惯导的同步定位与建图方案[J].测绘科学,2020,…...
wordpress app应用/上海网站排名优化
没有学习过红黑树的同学请参考: <<Introduction to Algorithms>> Chapter 13 Red-Black Trees Chapter 14 Augmenting Data Structures 教你透彻了解红黑树 一、红黑树的介绍 先来看下算法导论对R-B Tree的介绍:红黑树,一种二叉…...