Springboot2.x配置ObjectMapper日期格式化不生效的问题解决

 更新时间:2026年08月03日 09:04:38   作者:风去影无踪  
在使用Spring Boot 2.x时,如果你希望配置ObjectMapper的日期格式化,但发现配置不生效,可能是因为配置方式不正确或者配置时机不对,下面是一些常见的解决方案和最佳实践,帮助你确保日期格式化配置生效

问题起因:与前端对接接口发现日期时间输出格式是数组,而代码中又有ObjectMapper格式化日期配置

环境:springboot2.x+jdk1.8

相关代码配置类

@Configuration
public class JacksonConfig {
    @Primary
    @Bean
    public ObjectMapper objectMapper() {
        ObjectMapper objectMapper = new ObjectMapper();
        JavaTimeModule javaTimeModule = new JavaTimeModule();
        javaTimeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
        javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
        //省略LocalDate、LocalTime的配置
        objectMapper.registerModule(javaTimeModule);
        objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
        objectMapper.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));
        objectMapper.registerModule(javaTimeModule);
        return objectMapper;
    }
}
@EnableWebMvc
@Component
public class MyWebMvcConfig implements WebMvcConfigurer {
     //省略一些常用配置
}

问题排查思路:

  1. 使用自动注入ObjectMapper,查看bean配置是否生效,bebug结果显示配置是注入到bean中

  1. 通过调用栈debug到AbstractJackson2HttpMessageConverter类,发现与注入的ObjectMapper的配置不一致
    private ObjectMapper selectObjectMapper(Class<?> targetType, @Nullable MediaType targetMediaType)

  1. 搜索发现代码注入@EnableWebMvc。将注解注释后重新bebug发现配置生效了。

解决方案:

方案一:直接删除@EnableWebMvc注解重启生效

方案二:保持原代码不动,在实现WebMvcConfigurer的类中重写extendMessageConverters方法

@Override
    public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
        for (HttpMessageConverter<?> converter : converters) {
            if (converter instanceof MappingJackson2HttpMessageConverter) {
                ((MappingJackson2HttpMessageConverter) converter).setObjectMapper(objectMapper);
                break;
            }
        }
    }

方案三:在LocalDateTime、LocalDate、LocalTime等字段使用@JsonFormat,如果接受参数类型也是日期时间类型,建议也加上@DateTimeFormat
因为是接手别人的代码,线上已经运行,没有办法只有选择方案二、方案三

到此这篇关于Springboot2.x配置ObjectMapper日期格式化不生效的文章就介绍到这了,更多相关Springboot2.x配置ObjectMapper日期格式化不生效内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 5分钟快速搭建SpringBoot3 + MyBatis-Plus工程/项目的实现示例

    5分钟快速搭建SpringBoot3 + MyBatis-Plus工程/项目的实现示例

    本文主要介绍了使用IntelliJ IDEA创建Spring Boot工程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-01-01
  • SpringBoot+redis配置及测试的方法

    SpringBoot+redis配置及测试的方法

    这篇文章主要介绍了SpringBoot+redis配置及测试的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • Mybatis中的游标查询Cursor(滚动查询)

    Mybatis中的游标查询Cursor(滚动查询)

    这篇文章主要介绍了Mybatis中的游标查询Cursor(滚动查询),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • Java多线程处理List问题

    Java多线程处理List问题

    这篇文章主要介绍了Java多线程处理List问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • SpringBoot中GlobalExceptionHandler异常处理机制详细说明

    SpringBoot中GlobalExceptionHandler异常处理机制详细说明

    Spring Boot的GlobalExceptionHandler是一个全局异常处理器,用于捕获和处理应用程序中发生的所有异常,这篇文章主要给大家介绍了关于Java中GlobalExceptionHandler异常处理机制的相关资料,需要的朋友可以参考下
    2024-03-03
  • Java并发编程之ConcurrentLinkedQueue队列详情

    Java并发编程之ConcurrentLinkedQueue队列详情

    这篇文章主要介绍了Java并发编程之ConcurrentLinkedQueue队列详情,ConcurrentLinkedQueue 内部的队列使用单向链表方式实现,下文更多相关内容叙述需要的小伙伴可以参考一下
    2022-04-04
  • Java String类正则操作示例

    Java String类正则操作示例

    这篇文章主要介绍了Java String类正则操作,结合实例形式分析了java针对数字的正则验证、过滤及邮箱正则验证相关操作技巧,需要的朋友可以参考下
    2019-07-07
  • Java设计模式之观察者模式原理与用法详解

    Java设计模式之观察者模式原理与用法详解

    这篇文章主要介绍了Java设计模式之观察者模式,结合实例形式详细分析了Java设计模式之观察者模式基本概念、原理、用法及操作注意事项,需要的朋友可以参考下
    2020-06-06
  • JAVA实现caesar凯撒加密算法

    JAVA实现caesar凯撒加密算法

    Carsar加密算法是最简单的加密算法,原理是把一个字母在字母表中移动相应的位置,比如输入a,将其移动3位,经过Caesar加密后输出的d,位置可以循环移动,输入x,则输出a
    2014-01-01
  • Spring @Retryable注解轻松搞定循环重试功能

    Spring @Retryable注解轻松搞定循环重试功能

    spring系列的spring-retry是另一个实用程序模块,可以帮助我们以标准方式处理任何特定操作的重试。在spring-retry中,所有配置都是基于简单注释的。本文主要介绍了Spring@Retryable注解如何轻松搞定循环重试功能,有需要的朋友可以参考一下
    2023-04-04

最新评论