Jackson 配置 Bigdecimal 序列化

笔者的项目使用了 jackson 序列化

要求

主要是两个方面:

  1. 位数:位数大于等于 4,则保留 4 位小数,否则保留对应的小数位数;
  2. 格式:不出现科学技术法,不以 0 结尾.

代码

序列化实现:

public class KeepMostFourBigDecimalSerializer extends JsonSerializer<BigDecimal> {/*** Method that can be called to ask implementation to serialize* values of type this serializer handles.** @param value       Value to serialize; can <b>not</b> be null.* @param gen         Generator used to output resulting Json content* @param serializers Provider that can be used to get serializers for*                    serializing Objects value contains, if any.*/@Overridepublic void serialize(BigDecimal value, JsonGenerator gen, SerializerProvider serializers) throws IOException {if (Objects.nonNull(value) && value.scale() >= 4) {gen.writeString(value.setScale(8, RoundingMode.DOWN).stripTrailingZeros().toPlainString());} else {gen.writeString(value.stripTrailingZeros().toPlainString());}}
}

其中:

  1. stripTrailingZeros() 是为了去结尾的 0
  2. toPlainString() 是为了防止出现科学计数法以及 JSON 格式中的 {“value”: 1.01} 变成 {“value”: “1.01”}.

BTW:有的同事通过 extends JsonSerializer<Object> 然后再重写 serialize(Object value, JsonGenerator gen, SerializerProvider serializers) 方法的时候针对 value 的数据类型来实现响应的需求。我认为这种方式从达成目标的角度来说是可以达成目的的,但是有点违反 单一职责,创建相关的序列化类的时候(比如说小数点)还是按照业务需求(保留规则)来而不是场景(用来做什么,比如说人民币、美元)来编码。

使用的时候直接使用 @JsonSerialize 注解标注在对应的实体类的属性上即可:

    public static class YourClass{@JsonSerialize(using = KeepMostFourBigDecimalSerializer .class)private BigDecimal value;// 省略 getter 和 setter}

One More Thing

由于 Spring Boot 默认使用 jackson 序列化,这里分享下 Fastjson 相关方案:

  1. 在 Spring MVC 中集成 Fastjson
  2. 在 Spring MVC 中集成 Fastjson2

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

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

相关文章

【网络协议】Http-中

搜索引擎&#xff1a;搜索引擎是指根据一定的策略、运用特定的计算机程序从互联网上采集信息&#xff0c;在对信息进行组织和处理后&#xff0c;为用户提供检索服务&#xff0c;将检索的相关信息展示给用户的系统。搜索引擎是工作于互联网上的一门检索技术&#xff0c;它旨在提…

简明 SQL 组合查询指南:掌握 UNION 实现数据筛选

在SQL中&#xff0c;组合查询是一种将多个SELECT查询结果合并的操作&#xff0c;通常使用UNION和UNION ALL两种方式。 UNION 用于合并多个查询结果集&#xff0c;同时去除重复的行&#xff0c;即只保留一份相同的数据。UNION ALL 也用于合并多个查询结果集&#xff0c;但不去除…

java 通过读配制文件的方式连接库。 信息保存在文件内

# JDBC配置 db.urljdbc:mysql://mysql.sqlpub.com:3306/huangjin db.usernameXXXXXXXX db.passwordfc12f7a5215e8e0a package com.abc.project3;import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.sql.*; import java.util.Prope…

XSS跨站脚本攻击

XSS全称&#xff08;Cross Site Scripting&#xff09;跨站脚本攻击,XSS属于客户端攻击&#xff0c;受害者最终是用户&#xff0c;在网页中嵌入客户端恶意脚本代码&#xff0c;最常用javascript语言。&#xff08;注意&#xff1a;叠成样式表CSS已经被占用所以叫XSS&#xff09…

Mac使用sz/rz

从使用体验上说,sz/rz要比scp要好得多.但Mac上使用这两个命令需要进行相应配置. sz&#xff1a;将选定的文件发送&#xff08;send&#xff09;到本地机器 rz&#xff1a;运行该命令会弹出一个文件选择窗口&#xff0c;从本地选择文件上传到Linux服务器 下载安装lrzsz brew i…

浅谈Vue3——父子组件传值

引言 Vue.js是一款流行的JavaScript框架&#xff0c;用于构建用户界面。它提供了一种简洁、灵活的方式来管理和渲染数据。在Vue3中&#xff0c;父子组件之间的数据传递是一个常见的需求。本文将介绍如何在Vue3中传递对象&#xff0c;并且在子组件中访问和修改父组件对象中的属…

探索智能应用的基石:多模态大模型赋能文档图像处理

目录 0 写在前面1 文档图像分析新重点2 token荒&#xff1a;电子文档助力大模型3 大模型赋能智能文档分析4 文档图像大模型应用可能性4.1 专有大模型4.2 多模态模型4.3 设计思路 总结 0 写在前面 中国智能产业高峰论坛(CIIS2023)旨在为政企研学各界学者专家提供同台交流的机会…

rom修改----安卓系列机型如何内置app 如何选择so文件内置

系统内置app的需求 在与各工作室对接中操作单中&#xff0c;很多需要内置客户特定的有些app到系统里&#xff0c;这样方便客户刷入固件后直接调用。例如内置apk 去开机引导 去usb调试 默认开启usb安全设置等等。那么很多app内置有不同的反应。有的可以直接内置。有的需要加so…

基于 Socket 网络编程

基于 Socket 网络编程 前言一、基于Socket的网络通信传输&#xff08;传输层&#xff09;二、UDP 的数据报套接字编程1、UDP 套接字编程 API2、使用 UDP Socket 实现简单通信 三、TCP 流套接字编程1、TCP 流套接字编程 API2、使用 TCP Socket 实现简单通信3、使用 Tcp 协议进行…

【实战案例】技术转项目经理容易踩的坑,我都踩了

“带团队容易&#xff0c;带好团队难。” 这是身边一位项目经理近期在团队管理方面的深刻感悟。目前&#xff0c;他手上的一个项目被迫暂停了&#xff0c;项目团队也散了。下面给大家简要分享下这个项目案例。 【案例分享】 小李负责的是一个二次开发的项目&#xff0c;所涉及…

ULID 在 Java 中的应用: 使用 `getMonotonicUlid` 生成唯一标识符

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

从零开始学网站建设:从需求分析到上线发布

从零开始学网站建设&#xff1a;从需求分析到上线发布 一、需求分析 首先&#xff0c;要成功地建设一个网站&#xff0c;需要进行深入的需求分析。这涉及到与潜在用户进行沟通&#xff0c;了解他们的需求和期望。在这个过程中&#xff0c;我们需要明确网站的目标和定位&#…

python MP4视频转GIF动图

python MP4视频转GIF动图 引言一、转换代码二、PyQt界面编写2.1 效果展示2.2 源码 三、打包成可执行文件(.exe) 一个相当于原视频三倍速的GIF动图 引言 将MP4格式的视频转为GIF动图可以方便地向他人展示动画效果。GIF是网络上广泛使用的图像格式之一&#xff0c;几乎所有的网…

C#-WinForm-发送邮件

登录QQ邮箱——设置——开启“POP3/SMTP服务” 登陆QQ邮箱→打开设置→开启“POP3/SMTP服务”&#xff0c;获取“授权码” 简单总结一下&#xff1a; 1、使用SmtpClient发送电子邮件是很简单的&#xff0c;只要正确创建了MailMessage对象和SmtpClient就可以很容易的发送出去电…

大二层—多链接透明互联协议如何工作

大二层就引入了 TRILL&#xff08;Transparent Interconnection of Lots of Link&#xff09;&#xff0c;即多链接透明互联协议。它的基本思想是&#xff0c;二层环有问题&#xff0c;三层环没有问题&#xff0c;那就把三层的路由能力模拟在二层实现。 运行 TRILL 协议的交换…

c语言进阶部分详解(指针进阶2)

大家好&#xff01;我快马加鞭接着写出指针部分part2部分。第一部分见&#xff1a;c语言进阶部分详解&#xff08;指针进阶1&#xff09;_总之就是非常唔姆的博客-CSDN博客 指针初阶部分见&#xff1a;c语言进阶部分详解&#xff08;指针初阶&#xff09;_总之就是非常唔姆的博…

CSP-J 2023 入门级 第一轮 阅读程序(2)

【题目】 CSP-J 2023 入门级 第一轮 阅读程序&#xff08;2&#xff09; #include <iostream> #include <vector> #include <algorithm> using namespace std; int f(string x, string y) {int m x.size();int n y.size();vector<vector<int>&g…

【计算机网络】深入理解TCP协议二(连接管理机制、WAIT_TIME、滑动窗口、流量控制、拥塞控制)

TCP协议 1.连接管理机制2.再谈WAIT_TIME状态2.1理解WAIT_TIME状态2.2解决TIME_WAIT状态引起的bind失败的方法2.3监听套接字listen第二个参数介绍 3.滑动窗口3.1介绍3.2丢包情况分析 4.流量控制5.拥塞控制5.1介绍5.2慢启动 6.捎带应答、延时应答 1.连接管理机制 正常情况下&…

Vulnhub系列靶机-Hackadmeic.RTB1

文章目录 Vulnhub系列靶机-Hackadmeic.RTB11. 信息收集1.1 主机扫描1.2 端口扫描1.3 目录爆破 2. 漏洞探测3. 漏洞利用3.1 反弹Shell 4. 内核提权 Vulnhub系列靶机-Hackadmeic.RTB1 1. 信息收集 1.1 主机扫描 arp-scan -l1.2 端口扫描 nmap -A -p- 192.168.188.184扫描到了…

传统的经典问题 Java 的 Interface 是干什么的

传统的经典问题 Java 的 Interface 是干什么 解答 上面的这个问题应该还是比较好回答的吧。 只要你做过 Java &#xff0c;通常 Interface 的问题多多少少会遇到&#xff0c;而且可能会遇到一大堆。 在JAVA编程语言中是一个抽象类型&#xff08;Abstract Type&#xff09;&…