Spring MVC Controller返回json日期格式配置失效的解决办法

如题,Spring MVC 4.3.0版本,配置jackson读写json。Controller层方法返回值对象包含java.util.Date类型的属性,并且在applicationContext.xml中配置了jackson的日期格式:

XML 复制代码
    <mvc:annotation-driven>
        <mvc:message-converters>
            <bean class="org.springframework.http.converter.StringHttpMessageConverter"/>
            <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<!--                <property name="objectMapper" ref="objectMapper"/>-->
                <constructor-arg index="0" ref="objectMapper"/>
            </bean>
        </mvc:message-converters>
    </mvc:annotation-driven>
    <bean id="objectMapper" class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean">
        <property name="simpleDateFormat" value="yyyy-MM-dd HH:mm:ss"/>
    </bean>

但是调用Controller层方法发现日期格式返回的是时间戳,日期格式配置失效了。

经过多次调试跟踪,笔者发现原因是<mvc:annotation-driven>标签会自动注册RequestMappingHandlerAdapter(位置在WebMvcConfigurationSupport类中),其中setMessageConverters方法会覆盖掉我们配置的jackson converter,因此问题的解决从Spring容器中获取RequestMappingHandlerAdapter这个bean,然后找到内部的MappingJackson2HttpMessageConverter,以代码的方式重新配置即可。

java 复制代码
@Configuration
//@EnableWebMvc
public class MyWebMvcConfigurer extends WebMvcConfigurerAdapter {

    private final Logger logger = LoggerFactory.getLogger(MyWebMvcConfigurer.class);

    @Autowired
    private RequestMappingHandlerAdapter adapter;

    @PostConstruct
    public void configureAdapter() {
        for(HttpMessageConverter<?> converter: adapter.getMessageConverters()) {
            if(converter instanceof MappingJackson2HttpMessageConverter) {
                ObjectMapper objectMapper = new ObjectMapper();
                objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
                ((MappingJackson2HttpMessageConverter) converter).setObjectMapper(objectMapper);
            }
        }
    }
}
相关推荐
zhangfeng11339 小时前
JupyterLab 里,JSON文件纯文本格式编辑 / 查看
人工智能·json
凡人叶枫9 小时前
Effective C++ 条款35:考虑 virtual 函数以外的其他选择
java·c++·spring
一个被程序员耽误的厨师10 小时前
04-实践篇-让AI生成可视化页面-ai-json-ui的落地实践
人工智能·ui·json
无聊的老谢10 小时前
基于 Spring Batch 的电信 MR 数据亿级记录清洗实战
spring·batch·mr
Full Stack Developme10 小时前
Spring Integration 教程
java·后端·spring
星辰_mya10 小时前
autowired和resource区别
java·后端·spring·架构·原理
秋雨梧桐叶落莳11 小时前
iOS——QQ音乐仿写项目总结
学习·macos·ui·ios·mvc·objective-c·xcode
swordbob11 小时前
Spring Cloud 5 大组件 · 单个服务开发顺序
后端·spring·spring cloud
Boop_wu11 小时前
[Spring Cloud] Nacos核心功能详解:从负载均衡到配置中心的全链路实践
spring·spring cloud·负载均衡
我星期八休息12 小时前
Linux系统编程—mmap文件映射
java·linux·运维·服务器·数据库·mysql·spring