springboot~重写json序列化方式

public interface WebMvcConfigurer {

    default void configurePathMatch(PathMatchConfigurer configurer) {

    }

    default void configureContentNegotiation(ContentNegotiationConfigurer configurer) {

    }

    default void configureAsyncSupport(AsyncSupportConfigurer configurer) {

    }

...

}

我们来定义自己的WebMvcConfigurer,并且重写一个JSON输出的格式

@Configuration

@EnableWebMvc //覆盖默认的配置

public class WebMvcConfigurerImpl implements WebMvcConfigurer {

    @Override

    public void configureMessageConverters(List> converters) {

        MappingJackson2HttpMessageConverter jackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter();

        ObjectMapper objectMapper = new ObjectMapper();

        /**

        * 序列换成Json时,将所有的Long变成String

        * 因为js中得数字类型不能包括所有的java Long值

        */

        SimpleModule simpleModule = new SimpleModule();

        simpleModule.addSerializer(Long.class, ToStringSerializer.instance);

        simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance);

        // 所有的double类型返回保留三位小数

        simpleModule.addSerializer(BigDecimal.class, new MoneySerialize());

        // double保留两位小数

        simpleModule.addSerializer(Double.class, new DoubleSerialize());

        simpleModule.addSerializer(Double.TYPE, new DoubleSerialize());

        objectMapper.registerModule(simpleModule);

        jackson2HttpMessageConverter.setObjectMapper(objectMapper);

        converters.add(jackson2HttpMessageConverter);

    }

/**

    * money serializer.

    */

    public class MoneySerialize extends JsonSerializer {

        //修改要除的数据

        final BigDecimal TEMP = BigDecimal.valueOf(1000000L);

        @Override

        public void serialize(Object value, JsonGenerator gen, SerializerProvider serializers) throws IOException {

            if (value != null) {

                BigDecimal bigDecimal = new BigDecimal(value.toString());

                gen.writeNumber(bigDecimal.divide(TEMP, 4, RoundingMode.DOWN));

            }

        }

    }

    /**

    * double serializer.

    */

    public class DoubleSerialize extends JsonSerializer {

        private DecimalFormat df = new DecimalFormat("##.00");

        @Override

        public void serialize(Double value, JsonGenerator gen, SerializerProvider serializers)

                throws IOException, JsonProcessingException {

            if (value != null) {

                gen.writeString(df.format(value));

            }

        }

    }

深圳网站建设www.sz886.com

你可能感兴趣的:(springboot~重写json序列化方式)