bb69326704058f426f03e0db1eb7f817.png

点击上方“Java从初级到高级”,在跳转的界面中点击右上角的“···”三个点,然后选择“设为星标”,您的认可就是我最大的动力!给我打气加油吧!

在项目开发中,难免会遇到有小数处理的情况,而java的float浮点型或者double双精度型都可以处理小数,那么对象中的小数如何输出到api中呢?

我经常遇到的问题就是小数的长度太长时,格式化后的数据往往是科学计数法的数据,这个导致在前端调用api返回json数据后数据显示错误。而我想要的结果就是以字符串的形式完整显示小数,网上各种解决方案,有直接配置jackson设置的,有使用已存在的注解的,有配置格式化的,但是我也试了很多方案,结果总是不理想,经过不懈努力最终找到了比较满意的方案。

下面是我继承jackson序列化类自定义序列化double数的解决方案。import com.fasterxml.jackson.core.JsonGenerator;import com.fasterxml.jackson.core.JsonProcessingException;import com.fasterxml.jackson.> com.fasterxml.jackson.databind.SerializerProvider;import java.io.IOException;import java.math.BigDecimal;/** * double输出不以科学计数法显示 * * @author liang - liangxn * @date 2019/7/4 17:57 * @description */public class CustomDoubleSerializer extends JsonSerializer {    @Override    public void serialize(Double value, JsonGenerator gen, SerializerProvider serializers)            throws IOException, JsonProcessingException {        BigDecimal d = new BigDecimal(value.toString());        gen.writeNumber(d.stripTrailingZeros().toPlainString());    }    @Override    public Class handledType() {        return Double.class;    }}

然后在model中使用@JsonSerialize注解import com.fasterxml.jackson.databind.annotation.JsonSerialize;    @JsonSerialize(using = CustomDoubleSerializer.class)    protected double doubleTest;

上面就是我的解决方法,当然在有些项目中,可能直接配置下jackson的设置,就可以解决,但是每个项目可能都有一些不解的地方,别人的配置生效,自己的配置却不一定生效。只能说是能实现即可,合适自己的最好。

根据上面的方式,类似的可以写其他的各种序列化方法,基本可以把任何一种数据序列化为自定义的格式,举一反三也就这么简单。

老铁请看右下角的“再看”点一下,你是最棒的!

Logo

加入社区!打开量化的大门,首批课程上线啦!

更多推荐