MappingJackson2HttpMessageConverter 如何处理Decimal小数点保留2位问题?

诠释这低调 发布于 2016/05/03 15:01
阅读 303
收藏 0

解读下一代网络:算力网络正从理想照进现实!>>>

public class CustomObjectMapper extends JsonSerializer<BigDecimal> {


@Override
public void serialize(BigDecimal value, JsonGenerator gen, SerializerProvider serializers)
throws IOException, JsonProcessingException {
DecimalFormat df = new DecimalFormat("#.00");//四舍五入
gen.writeString(df.format(value));

}  

}

加载中
0
渐行0渐远
渐行0渐远

这里有全局处理和局部处理两种方式,

局部处理使用注解:

public class Demo{
    @JsonSerialize(using = BigDecimalJsonSerializer.class)
    private BigDecimal num = new BigDecimal("23.54645");

    // getter,setter
}

public class BigDecimalJsonSerializer extends JsonSerializer<BigDecimal> {

    @Override
    public void serialize(BigDecimal value, @NotNull JsonGenerator gen, SerializerProvider serializers) throws IOException {
        gen.writeRawValue(value.setScale(2, RoundingMode.HALF_UP).toString());
    }

}

全局处理方式可以在任意配置类中,向 ObjectMapper 注册新的模块:

@PostConstruct
public void configObjectMapper(@NotNull ObjectProvider<ObjectMapper> provider) {
    provider.ifAvailable(mapper -> {
        SimpleModule module = new SimpleModule();
        module.addSerializer(BigDecimal.class, new BigDecimalJsonSerializer());
        mapper.registerModule(module);
    });
}

 

返回顶部
顶部