目录
一、场景描述
在开发过程中,如果有实体类的属性中存在BigDecimal的属性,并且需要对其进行校验,例如:限制BigDecimal的小数点位数是两位。但目前没有注解可以完成这个操作,因此我们可以使用下面的工具类和注解进行处理。
二、实现步骤
1、自定义类
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import java.io.IOException;
import java.math.BigDecimal;
import java.math.RoundingMode;
public class BigDecimalSerializer extends JsonSerializer<BigDecimal> {
@Override
public void serialize(BigDecimal value, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
if (value != null) {
// 保留2位小数,四舍五入
BigDecimal number = value.setScale(2, RoundingMode.HALF_UP);
jsonGenerator.writeNumber(number);
} else {
jsonGenerator.writeNumber(value);
}
}
}
2、使用注解
import com.example.yht.utils.BigDecimalSerializer;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import lombok.Data;
import lombok.ToString;
import java.math.BigDecimal;
@Data
@ToString
public class Student {
private String name;
private Integer age;
private String address;
@JsonSerialize(using = BigDecimalSerializer.class)
private BigDecimal score;
}
3、测试
@RestController
public class TestController {
@PostMapping("/test")
public Student test(@RequestBody Student student){
return student;
}
}
测试结果: