栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

spring boot BigDecimal序列化保留小数位自定义注解

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

spring boot BigDecimal序列化保留小数位自定义注解

BigDecimal保留小数,每次都要java代码中写比较繁琐,写一个自定义注解就比较方便,直接上代码:

1、定义注解:

@Target({ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
public @interface NumberCustomize {
    // 保留几位小数
    int value();

    // 是否去0
    boolean stripZero() default true;
}

2、编写自定义valueFilter

public class ZreContextValueFilter implements ContextValueFilter {
    private final static Logger logger = LoggerFactory.getLogger(ZreContextValueFilter.class);

    @Override
    public Object process(BeanContext context, Object object, String name, Object value) {
        if (value == null || !(value instanceof BigDecimal)) {
            return value;
        }
        NumberCustomize annation = context.getAnnation(NumberCustomize.class);
        if (annation == null) {
            return value;
        }
        BigDecimal propertyValue = (BigDecimal)value;
        if (propertyValue == null) {
            return value;
        }
        boolean stripZero = annation.stripZero();
        propertyValue = propertyValue.setScale(annation.value(), BigDecimal.ROUND_HALF_UP);
        if (stripZero) {
            return propertyValue.stripTrailingZeros().toPlainString();
        }
        return propertyValue;

    }
}

3、配置fastjson的HttpMessageConverter

@Configuration
public class ConverterConfig {
    @Bean
    public HttpMessageConverters fastJsonHttpMessageConverters() {
        // 创建FastJson信息转换对象
        FastJsonHttpMessageConverter fastJsonHttpMessageConverter = new FastJsonHttpMessageConverter();
        // 创建FastJson对象并设定序列化规则
        FastJsonConfig fastJsonConfig = new FastJsonConfig();
        // 添加自定义valueFilter
        fastJsonConfig.setSerializeFilters(new ZreContextValueFilter());
        fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat);
        fastJsonHttpMessageConverter.setSupportedMediaTypes(Arrays.asList(MediaType.APPLICATION_JSON_UTF8));
        // 规则赋予转换对象
        fastJsonHttpMessageConverter.setFastJsonConfig(fastJsonConfig);
        StringHttpMessageConverter stringHttpMessageConverter =
            new StringHttpMessageConverter(Charset.forName("UTF-8"));
        return new HttpMessageConverters(fastJsonHttpMessageConverter, stringHttpMessageConverter);
    }
}

4、直接在dto中添加注解

    @NumberCustomize(0)
    private BigDecimal progress;

亲测有效,注解有两个参数,保留几位小数和是否去零(默认去零)。

注:spring系统默认使用的是MappingJackson2HttpMessageConverter,这里用了

FastJsonHttpMessageConverter,会导致jackson的注解不可用。如@JsonIgnore等,需要用@JSONField(serialize = false)来替代

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/991806.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号