美文网首页
Spring Boot同时实现返回json时候日期格式化以及Lo

Spring Boot同时实现返回json时候日期格式化以及Lo

作者: 李北北 | 来源:发表于2017-09-10 16:29 被阅读0次

    问题

    在写返回json格式数据的接口时候:
    1、总会需要将Date转换为比如yyyy-MM-dd HH:mm:ss格式的字符串。
    2、也会遇到json返回Long类型数值到前端失真的问题,比如356454813136846848返回到前端后变成了356454813136846850。

    解决办法

    当然可以在每个接口中对进行处理,但是这样每次都进行时间格式化和类型转换,太麻烦了。

    下面介绍用MappingJackson2HttpMessageConverter转换器对其进行统一处理。在配置类WebConfig中分别定义日期格式转换器和long转字符串的转换器,并且在configureMessageConverters方法中将其加入到转换器列表:

    @EnableWebMvc
    @Configuration
    public class WebConfig extends WebMvcConfigurerAdapter {
    
    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        converters.add(new ByteArrayHttpMessageConverter());
        converters.add(new StringHttpMessageConverter());
        converters.add(new ResourceHttpMessageConverter());
        converters.add(new AllEncompassingFormHttpMessageConverter());
        converters.add(new StringHttpMessageConverter());
        converters.add(jackson2HttpMessageConverter());
    }
    
    /**
     * 时间格式转换器,将Date类型统一转换为yyyy-MM-dd HH:mm:ss格式的字符串
     * @author 北北
     * @date 2017年9月10日上午9:33:06
     * @return
     */
    @Bean
    public MappingJackson2HttpMessageConverter jackson2HttpMessageConverter() {
        MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
        ObjectMapper mapper = new ObjectMapper();
        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));    
        converter.setObjectMapper(mapper);
        return converter;
    }
    
    /**
     * 返回json时候将long类型转换为String类型的转换器
     * @author 北北
     * @date 2017年9月10日上午9:33:06
     * @return
     */
    @Bean
    public MappingJackson2HttpMessageConverter longToStringConverter() {
        MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
        ObjectMapper mapper = new ObjectMapper();
        SimpleModule simpleModule = new SimpleModule();
        simpleModule.addSerializer(Long.class, ToStringSerializer.instance);
        simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance);
        mapper.registerModule(simpleModule);
        converter.setObjectMapper(mapper);
        return converter;
    }
    }
    

    去测试时候就会发现,只有先加入的转换器生效,后加入的那个没有效果,怎么办呢?
    后来想到了一个解决办法,就是将两个方法合并起来,最终代码如下:

    @EnableWebMvc
    @Configuration
    public class WebConfig extends WebMvcConfigurerAdapter {
    
    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        converters.add(new ByteArrayHttpMessageConverter());
        converters.add(new StringHttpMessageConverter());
        converters.add(new ResourceHttpMessageConverter());
        converters.add(new AllEncompassingFormHttpMessageConverter());
        converters.add(new StringHttpMessageConverter());
        converters.add(jackson2HttpMessageConverter());
    }
    
    /**
     * 时间格式转换器,将Date类型统一转换为yyyy-MM-dd HH:mm:ss格式的字符串
     * @author 北北
     * @date 2017年9月10日上午9:33:06
     * @return
     */
    @Bean
    public MappingJackson2HttpMessageConverter jackson2HttpMessageConverter() {
        MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
        ObjectMapper mapper = new ObjectMapper();
    
        //日期格式转换
        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
        
        //Long类型转String类型
        SimpleModule simpleModule = new SimpleModule();
        simpleModule.addSerializer(Long.class, ToStringSerializer.instance);
        simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance);
        mapper.registerModule(simpleModule);
        
        converter.setObjectMapper(mapper);
        return converter;
    } 
    }

    相关文章

      网友评论

          本文标题:Spring Boot同时实现返回json时候日期格式化以及Lo

          本文链接:https://www.haomeiwen.com/subject/whqtsxtx.html