Date、BigDecimal类型值转换
Date、BigDecimal类型值转换
前端输入:
{"dueDate": "2025-12-21 12:32:44", "name": "艾伦","payMethod": "1","price": 120.235,"rate": 0.043453,"time1": "2025/09/01"
}
@Data
public class ConvertRequest {private String name;@JsonFormat(pattern = "yyyy/MM/dd")private Date time1;@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")private Date dueDate;private BigDecimal price;private BigDecimal rate;private String payMethod;
}
后端输出:
{"code": 1,"msg": null,"data": {"name": "艾伦","time1": 1756684800000,"dueDate": "2025-12-21 12:32:44","price": "120.24","rate": "4.35%","payMethod": "一次性还清"}
}
@Data
public class ConvertResponse {private String name;private Date time1;@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")private Date dueDate;private String price;private String rate;private String payMethod;
}
数据库表:
CREATE TABLE `t_convert_test` (`id` bigint(20) NOT NULL AUTO_INCREMENT,`name` varchar(32) DEFAULT NULL,`due_date` datetime DEFAULT NULL,`price` decimal(18,4) DEFAULT NULL,`rate` decimal(18,7) DEFAULT NULL,`pay_method` varchar(2) DEFAULT NULL,`create_time` datetime DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4
@Data
public class ConvertBO {private int id;private String name;private Date dueDate;private BigDecimal price;private BigDecimal rate;private String payMethod;private Date createTime;/*** 格式化价格为两位小数(四舍五入)* @param price 价格值* @return 格式化后的价格字符串*/public static String formatPrice(BigDecimal price) {if (price == null) {return "0.00";}return price.setScale(2, RoundingMode.HALF_UP).toString();}/*** 格式化利率为百分比格式,保留两位小数(四舍五入)* @param rate 利率值(例如:0.1256 表示 12.56%)* @return 格式化后的百分比字符串*/public static String formatRate(BigDecimal rate) {if (rate == null) {return "0.00%";}// 将利率乘以100转换为百分比BigDecimal percentage = rate.multiply(new BigDecimal("100"));// 保留两位小数并四舍五入percentage = percentage.setScale(2, RoundingMode.HALF_UP);return percentage.toString() + "%";}
}
表数据:
"id" "name" "due_date" "price" "rate" "pay_method" "create_time"
"1" "沃德" "2025-09-04 21:47:13" "19.9900" "3.3200000" "1" "2025-09-02 21:47:31"
"2" "沃克" "2025-09-11 20:32:44" "20.0400" "0.4300000" "2" "2025-09-06 22:00:29"
"3" "哈楼" "2025-09-11 20:32:44" "20.0300" "0.4300000" "2" "2025-09-06 22:07:06"
"4" "尼格" "2025-09-21 20:32:44" "20.2300" "0.0400000" "1" "2025-09-06 22:24:26"
"5" "吹杨" "2025-12-21 20:32:44" "120.2340" "0.0434430" "1" "2025-09-06 22:28:28"
"6" "艾伦" "2025-12-21 20:32:44" "120.2350" "0.0434530" "1" "2025-09-06 22:30:05"
处理流程:
@RestController
@RequestMapping("/inoutput")
@Api(tags = "输入输出类型转换")
public class ConvertController {@Autowiredprivate ConvertDao convertDao;@PostMapping("/convert")@ApiOperation("输入输出转换")public Result<ConvertResponse> convert(@RequestBody ConvertRequest request) {// 输入int age = request.getAge(); // 30Date time1 = request.getTime1(); // Mon Sep 01 08:00:00 CST 2025 Date time2 = request.getDueDate(); // Sun Dec 21 20:32:44 CST 2025 BigDecimal price1 = request.getPrice1(); // 220 BigDecimal price2 = request.getPrice(); // 120.235 BigDecimal price3 = request.getRate(); // 0.043453 // 落库ConvertBO convertBO = BeanUtil.copyProperties(request, ConvertBO.class);convertBO.setCreateTime(new Date());convertDao.insert(convertBO);// 查库ConvertBO res = convertDao.selectById(convertBO.getId());// 值转换,价格保留两位小数,四舍五入,利率加%保留两位小数,四舍五入ConvertResponse response = BeanUtil.copyProperties(res, ConvertResponse.class);BigDecimal price = res.getPrice();response.setPrice(ConvertBO.formatPrice(price));BigDecimal rate = res.getRate();response.setRate(ConvertBO.formatRate(rate));response.setPayMethod(PayMethodEnum.getDescByCode(response.getPayMethod()));// 输出response.setTime1(time1);return Result.success(response);}
}
@Mapper
public interface ConvertDao {ConvertBO selectById(Integer id);int insert(ConvertBO convertBO);
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.sky.ext.inoutput.dao.ConvertDao"><select id="selectById" resultType="com.sky.ext.inoutput.bo.ConvertBO">select * from t_convert_test where id = #{id}</select><insert id="insert" parameterType="com.sky.ext.inoutput.bo.ConvertBO" keyProperty="id" useGeneratedKeys="true">insert into t_convert_test (name, due_date, price, rate, pay_method, create_time)values (#{name}, #{dueDate}, #{price}, #{rate}, #{payMethod}, #{createTime});</insert>
</mapper>
@Getter
@AllArgsConstructor
public enum PayMethodEnum {YCXHQ("1", "一次性还清"),XBHX("2", "先本后息");private String code;private String desc;public static String getDescByCode(String code){for (PayMethodEnum value : PayMethodEnum.values()) {if(value.getCode().equals(code)){return value.getDesc();}}return null;}
}