通过反射修改类的相关属性值等
需求大概
我们的业务系统的订单最后生成订货发货单中,需要将里面所有BigDecimal 类型的值 做特殊处理
金额为 0 就做空 不为零要保留小数等等
代码实现
//获取class对象
Class<? extends OrderDTO> order= orderDTO.getClass();
Field[] declaredFields = order.getDeclaredFields();
// 解析遍历所有字段属性
for (Field field : declaredFields) {
field.setAccessible(true);
Object value = field.get(orderDTO);
if (!Objects.isNull(value)&& field.getType().equals(BigDecimal.class)){
//若字段值不为空 则继续下一步操作
BigDecimal bigDecimal = (BigDecimal)value;
//保留两位小数
BigDecimal zero = BigDecimal.ZERO.setScale(2);
//有相关价格为空时
if (zero.equals(bigDecimal)){
field.set(orderDTO,null);
}
}else if (!Objects.isNull(value) && "0".equals(value.toString())){
field.set(orderDTO,null);
}else if (!Objects.isNull(value) && "0.00".equals(value.toString())){
field.set(orderDTO,null);
}
}
通过filed.set()方法设置需要修改的业务值
这样就不需要使用大量的重复代码 if 去判断每个字段的字段值