spring boot 格式化bigdecimal为小数点2位字符串

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package cn.piian.common.utils;


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;

public class TwoDecimalPlacesSerialize extends JsonSerializer<BigDecimal> {

@Override
public void serialize(BigDecimal bigDecimal, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
if (bigDecimal != null) {
jsonGenerator.writeString(bigDecimal.setScale(2, BigDecimal.ROUND_HALF_DOWN) + "");
} else {
jsonGenerator.writeString("");
}
}
}
1
2
3
4
5
6
@Data
public class OrderCommissionVo {
@JsonSerialize(using = TwoDecimalPlacesSerialize.class)
private BigDecimal total;
}

全局使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
@Configuration
public class MyWebConfig implements WebMvcConfigurer {
@Value("${spring.jackson.date-format}")
String format;
@Bean
Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {
return builder -> {
// 全局bigdecimal类型的转换
builder.serializerByType(BigDecimal.class, new CustomDecimalSerializer());
// 时间转换,通过设置环境
builder.serializerByType(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(format)));
};
}
}