zoukankan      html  css  js  c++  java
  • 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()));
        }
    
    }
    
  • 相关阅读:
    php中"::"双冒号有什么作用
    微信公众平台中的openid是什么?
    微信支付:“当前页面的URL未注册”
    HTTPS的一些疑问解答
    傻瓜式十分钟免费开启 HTTPS,是时候为你的站点加上小绿锁了
    微信支付开发(1) JS API支付V3版(转)
    php支付宝接口用法
    DedeCMS Error: (PHP 5.3 and above) Please set request_order
    使用 Laravel 框架:成为微信公众平台开发者
    thread线程栈size及局部变量最大可分配size【转】
  • 原文地址:https://www.cnblogs.com/woshimrf/p/12175861.html
Copyright © 2011-2022 走看看