SpringBoot 为了偷懒,我封装了一个自适配的数据单位转换工具类!

文章介绍了如何通过Java的反射和自定义注解实现数据单位的自动化转换,以减少手动处理的繁琐。首先,通过一个Map标记需要转换的字段及转换类型,然后使用反射遍历对象并执行转换操作。进一步,文章引入自定义注解`JcBigDecConvert`,直接在字段上标注转换类型,使转换过程更直观且易于扩展。
摘要由CSDN通过智能技术生成

前言

平时做一些统计数据,经常从数据库或者是从接口获取出来的数据,单位是跟业务需求不一致的。

  • 比如, 我们拿出来的 分, 实际上要是元

  • 又比如,我们拿到的数据需要 乘以100 返回给前端做 百分比展示

  • 又比如, 千分比转换

  • 又比如,拿出来的金额需要变成 万为单位

  • 又比如,需要保留2位小数

  • ......

  • 等等等等

平时我们怎么搞?

很多时候拿到的是一个数据集合list,就需要去遍历然后根据每个DTO的属性去做相关单位转换。

一直get 完 set ,get 完 set ,get 完 set ,get 完 set ,get 完 set ,人都麻了。

就像这样:

所以,如果通过反射自动匹配出来一些操作转换,是不是就看代码看起来舒服一点,人也轻松一点。

答案:是的

然后,我就搞了。

正文

本篇内容简要:

  1. 初步的封装,通过map去标记需要转换的 类属性字段

  2. 进一步的封装, 配合老朋友自定义注解搞事情

产品:

  • 支付总金额 换成万 为单位, 方便运营统计 ;

  • 那个什么计数,要是百分比的 ;

  • 然后还有一个是千分比;

  • 另外,还有2个要保留2位小数;

  • 还有啊,那个。。。。。。

我:

别说了,喝口水吧。

拿到的数据都在这个DTO里面 :

开始封装:

① 初步的封装,通过map去标记需要转换的 类属性字段

思路玩法:

  1. 通过反射拿出字段

  2. 配合传入的转换标记Map 匹配哪些字段需要操作

  3. 然后从map取出相关字段的具体操作是什么,然后执行转换操作

  4. 重新赋值

① 简单弄个枚举,列出现在需求上的转换操作类型

UnitConvertType.java

/**
 * @Author : JCccc
 * @CreateTime : 2023/01/14
 * @Description :
 **/
public enum UnitConvertType {
 
    /**
     * 精度
     */
    R,
    /**
     * 万元
     */
    B,
    /**
     * 百分
     */
    PERCENTAGE,
    /**
     * 千分
     */
    PERMIL
}

② 核心封装的转换函数

UnitConvertUtil.java。

import lombok.extern.slf4j.Slf4j;
import java.lang.reflect.Field;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
/**
 * @Author : JCccc
 * @CreateTime : 2023/01/14
 * @Description :
 **/
@Slf4j
public class UnitConvertUtil {
 
    public static <T> void unitMapConvert(List<T> list, Map<String, UnitConve
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值