专栏首页Ryan MiaoSpringboot Jackson配置根本方案, 日期格式化, 时区设置生效

Springboot Jackson配置根本方案, 日期格式化, 时区设置生效

当项目集成配置的功能越来越多, 说不准哪个配置就影响到了什么.

比如你启用了EnableMvC, 默认配置文件配置的一些文件就失效了. 虽然约定大于配置,让springboot可以极简化构建, 但不熟悉内部各个组件执行原理会导致我们经常出一些莫名其妙的问题, 比如配置不生效,比如Jackson的日期格式化.

debug了很久, 配置文件不生效, 直接声明ObjectMapper也不管用. 原因就在于Springboot所谓的简化是通过一系列的条件配置产生, 比如WebMvcConfigurationSupport, 里面到处都是if-else配置逻辑. 这些配置开关复杂且并不知道散落在哪里.

既然如此, 我直接手动配置好了. 关于springboot json序列化的关键是MappingJackson2HttpMessageConverter, 我们需要把springboot默认给配置的converter干掉, 然后放上自己的.

@Configuration
public class RequestHandlerConfig extends WebMvcConfigurationSupport {

    private Logger logger = LoggerFactory.getLogger(RequestHandlerConfig.class);

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //请求上下文初始化拦截器配置
        logger.info("初始化拦截器完成.....");
    }
    @Override
    protected void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("swagger-ui.html")
            .addResourceLocations("classpath:/META-INF/resources/");
        registry.addResourceHandler("/webjars/**")
            .addResourceLocations("classpath:/META-INF/resources/webjars/");
    }

    @Bean
    public ObjectMapper jacksonObjectMapperCustomization() {
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        TimeZone timeZone = TimeZone.getTimeZone("Asia/Shanghai");
        format.setTimeZone(timeZone);

        Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder()
                .timeZone(timeZone)
                .dateFormat(format);

        return builder.build();
    }
    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        converters.removeIf(c -> c instanceof MappingJackson2HttpMessageConverter);
        converters.add(new MappingJackson2HttpMessageConverter(jacksonObjectMapperCustomization()));
    }

}
本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!
本文分享自作者个人站点/博客:http://www.cnblogs.com/woshimrf复制
如有侵权,请联系 yunjia_community@tencent.com 删除。
登录 后参与评论
0 条评论

相关文章

  • jackson学习之九:springboot整合(配置文件)

    程序员欣宸
  • 放弃FastJson!一篇就够,Jackson的功能原来如此之牛(万字干货)

    在上篇《经过多方调研,最终还是决定禁用FastJson!》中,讲了FastJson的基本使用以及存在的不确定性问题,所以最终决定在项目中放弃使用,进而选择市面上...

    程序新视界
  • springboot主要配置文件[电脑的配置怎么看]

    Java架构师必看
  • SpringBoot 中 Json 格式化配置

    SpringBoot 针对 jackson 是自动化配置的,如果需要修改,也可以自定义配置。

    BUG弄潮儿
  • 怎样学习 SpringBoot?

    什么是 SpringBoot? Spring Boot是 Spring 开源组织下的一个子项目,也是 Spring 组件一站式解决方案,主要是为了简化使用 Sp...

    网络技术联盟站
  • SpringBoot开发常见技术整合【学习笔记整理】

    @RestController = @Controller + @ResponseBody

    全栈程序员站长
  • SpringBoot源码深度解析

    Javaweb---Servlet+tomcat + Struct2 SpringMVC SPRINGboot.....

    艾编程
  • 重学springboot系列之JSON处理工具类

    fastjson为人诟病的问题:虽然fastjson速度上有一定的优势,但是其为了追求速度,很大程度放弃了JSON的规范性。因此还时不时的在有些版本中暴露安全问...

    大忽悠爱学习
  • SpringBoot2.x系列教程(十五)SpringBoot Jackson属性配置详解

    在SpringBoot中使用Jackson,Spring Boot默认提供了一套初始化配置,同时也提供了可通过application配置文件进行配置的项目。

    程序新视界
  • Springboot 系列(十六)你真的了解 Swagger 文档吗?

    目前来说,在 Java 领域使用 Springboot 构建微服务是比较流行的,在构建微服务时,我们大多数会选择暴漏一个 REST API 以供调用。又或者公司...

    未读代码
  • jackson学习之十(终篇):springboot整合(配置类)

    程序员欣宸
  • 大型项目废弃fastjson迁移至Gson保姆级攻略

    在被大家取关之前,我立下一个“远大的理想”,一定要在这周更新文章。现在看来,flag有用了。。。

    蛮三刀酱
  • Spring Boot和Feign中使用Java 8时间日期API(LocalDate等)的序列化问题

    LocalDate、 LocalTime、 LocalDateTime是Java 8开始提供的时间日期API,主要用来优化Java 8以前对于时间日期的处理操作...

    程序猿DD
  • SSM,SpringBoot相关知识盲区整理

    application/x-www-form-urlencoded是以表格的形式请求,而application/json则将数据序列化后才进行传递,如果使用了@...

    大忽悠爱学习
  • Spring Boot为Jackson配置日期时间格式

    十毛
  • SpringBoot常用配置

    前言:springboot集成了主流的第三方框架,但是需要使用springboot那一套配置方式。但是我这里只列举了非常非常常用的,可以看已发的几篇博客,慢慢会...

    二十三年蝉
  • SpringBoot 配置类整理 (长期保持更新)

    当我们想要返回 json 格式数据的时候,难免会出现 null 值得情况,因此加入如下配置即可解决问题,使用默认的 jackson 解决问题。

    Gorit

扫码关注云+社区

领取腾讯云代金券