线上bug的错误总结 (@Value注解、BigDecimal精度丢失和不定长参数)

一、@Value的问题
类没加注解@Component导致@Value取正式服配置信息没生效
总结:
1)@Value必须在注册类中使用,且类加载方式必须为注入方式
2)Value不能注释在static或者final的变量

二、强转为BigDecimal精度丢失的问题
BigDecimal 要与String 转换精度才不会丢失,与类型float和double强转都会有问题。
通常这样转:new BigDecimal(价格.toString())

三、不定长参数重载函数的问题
原函数send(String a,String b,String… c)
新增重载新函数send(String a,Boolean b)
刚开始一眼看过去,肯定是没问题的,
因为参数类型不一样和个数也不一样,肯定是重载后互不干扰的才对
直到线上出问题,代码会传null的情况没考虑到。
为什么会走下面的函数,null不是boolean类型也会走,原来…
总结:
1、String… 不定长参数,可以不传 ,传null和传多个
a、send(String a,String… b)
b、send(String a)
send(“1”)这样去调用,假如没有写b方法会去调用a的,但如果a和b方法同时有,会去调b方法(虽然两个都符合,但优先b已测)
2、java布尔允许值为true,false和null3种,基本类型boolean只有true和false2种包装类Boolean才有true,false和null3种
项目中重载函数如果写成send(String a,boolean b)就不会有问题了,因为send(“1”,null)不会调用这个方法

是的,@NumberFormat注解可以用于BigDecimal类型的数据。在BigDecimal类型的字段上使用@NumberFormat注解时,需要注意以下几点: 1. @NumberFormat注解中的pattern值应该设置为BigDecimal类型数据的展示格式,例如:"#.##"、"0.00"等。 2. BigDecimal类型的数据需要在导入和导出时进行类型转换,可以使用EasyExcel提供的Converter进行转换。 下面是一个使用@NumberFormat注解和Converter对BigDecimal类型数据进行导出的示例: ```java public class DemoData { @ExcelProperty(value = "金额", index = 0) @NumberFormat(pattern = "#.##") @ExcelIgnore private BigDecimal amount; // getter和setter方法省略 } public class BigDecimalConverter implements Converter<BigDecimal> { @Override public Class supportJavaTypeKey() { return BigDecimal.class; } @Override public CellData convertToExcelData(BigDecimal value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) { if (value == null) { return new CellData(""); } return new CellData(value.setScale(2, RoundingMode.HALF_UP).toString()); } @Override public BigDecimal convertToJavaData(CellData cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) { if (StringUtils.isEmpty(cellData.getStringValue())) { return null; } return new BigDecimal(cellData.getStringValue()); } } @Test public void testExport() { List<DemoData> dataList = new ArrayList<>(); DemoData data = new DemoData(); data.setAmount(new BigDecimal("1234.5678")); dataList.add(data); String fileName = "demo.xlsx"; EasyExcel.write(fileName, DemoData.class) .registerConverter(new BigDecimalConverter()) .sheet().doWrite(dataList); } ``` 在上面的代码中,我们将@NumberFormat注解应用在BigDecimal类型的amount字段上,并且注册了一个BigDecimalConverter用于BigDecimal类型的数据转换。在导出时,EasyExcel会将BigDecimal类型的数据转换成String类型,并且使用@NumberFormat注解中的pattern值进行格式化展示。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值