前言
平时做一些统计数据,经常从数据库或者是从接口获取出来的数据,单位是跟业务需求不一致的。
-
比如, 我们拿出来的 分, 实际上要是元
-
又比如,我们拿到的数据需要 乘以100 返回给前端做 百分比展示
-
又比如, 千分比转换
-
又比如,拿出来的金额需要变成 万为单位
-
又比如,需要保留2位小数
-
......
-
等等等等
平时我们怎么搞?
很多时候拿到的是一个数据集合list,就需要去遍历然后根据每个DTO的属性去做相关单位转换。
一直get 完 set ,get 完 set ,get 完 set ,get 完 set ,get 完 set ,人都麻了。
就像这样:
所以,如果通过反射自动匹配出来一些操作转换,是不是就看代码看起来舒服一点,人也轻松一点。
答案:是的
然后,我就搞了。
正文
本篇内容简要:
-
初步的封装,通过map去标记需要转换的 类属性字段
-
进一步的封装, 配合老朋友自定义注解搞事情
产品:
-
支付总金额 换成万 为单位, 方便运营统计 ;
-
那个什么计数,要是百分比的 ;
-
然后还有一个是千分比;
-
另外,还有2个要保留2位小数;
-
还有啊,那个。。。。。。
我:
别说了,喝口水吧。
拿到的数据都在这个DTO里面 :
开始封装:
① 初步的封装,通过map去标记需要转换的 类属性字段
思路玩法:
-
通过反射拿出字段
-
配合传入的转换标记Map 匹配哪些字段需要操作
-
然后从map取出相关字段的具体操作是什么,然后执行转换操作
-
重新赋值
① 简单弄个枚举,列出现在需求上的转换操作类型
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