Date、BigDecimal类型值转换
前端输入:
json
{
"dueDate": "2025-12-21 12:32:44",
"name": "艾伦",
"payMethod": "1",
"price": 120.235,
"rate": 0.043453,
"time1": "2025/09/01"
}
java
@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;
}
后端输出:
json
{
"code": 1,
"msg": null,
"data": {
"name": "艾伦",
"time1": 1756684800000,
"dueDate": "2025-12-21 12:32:44",
"price": "120.24",
"rate": "4.35%",
"payMethod": "一次性还清"
}
}
java
@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;
}
数据库表:
sql
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
java
@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() + "%";
}
}
表数据:
txt
"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"
处理流程:
java
@RestController
@RequestMapping("/inoutput")
@Api(tags = "输入输出类型转换")
public class ConvertController {
@Autowired
private ConvertDao convertDao;
@PostMapping("/convert")
@ApiOperation("输入输出转换")
public Result<ConvertResponse> convert(@RequestBody ConvertRequest request) {
// 输入
int age = request.getAge(); // 30
Date 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);
}
}
java
@Mapper
public interface ConvertDao {
ConvertBO selectById(Integer id);
int insert(ConvertBO convertBO);
}
xml
<?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>
java
@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;
}
}