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

devtools/2024/9/24 5:06:40/

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

    <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,以代码的方式重新配置即可。

@Configuration
//@EnableWebMvc
public class MyWebMvcConfigurer extends WebMvcConfigurerAdapter {private final Logger logger = LoggerFactory.getLogger(MyWebMvcConfigurer.class);@Autowiredprivate RequestMappingHandlerAdapter adapter;@PostConstructpublic 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);}}}
}


http://www.ppmy.cn/devtools/98221.html

相关文章

聊聊最近很火的后端即服务

最近&#xff0c;你可能经常听到“后端即服务”&#xff08;Backend as a Service, BaaS&#xff09;这个词。不论是在技术论坛上&#xff0c;还是在开发者社区&#xff0c;BaaS都成了大家讨论的热点。究竟是什么让这个概念如此火爆&#xff1f;今天我们就来聊聊这个话题&#…

【数据结构】PTA 求链式表的表长 C语言

本题要求实现一个函数&#xff0c;求链式表的表长。 函数接口定义&#xff1a; int Length( List L ); 其中List结构定义如下&#xff1a; typedef struct LNode *PtrToLNode; struct LNode {ElementType Data;PtrToLNode Next; }; typedef PtrToLNode List; L是给定单链表…

学习大数据DAY37 hadoop 的安装和配置

目录 hadoop 大数据平台 Hadoop 的分布式存储主要基于 HDFS&#xff08;分布式文件系统&#xff09;: Hadoop 的分布式核心组件是 MapReduce 编程模型: Hadoop 大数据平台采用组件方式搭建。 Hadoop 组件 HDFS 组件用于存储数据,主要由 NameNode,DataNode,SecondaryNameNo…

常见开发语言获取USER_AGENT,go,python,php,java,asp,-SAAS本地化及未来之窗行业应用跨平台架构

一、USER_agent 解释 USER_AGENT 是一个 HTTP 请求头字段&#xff0c;它包含了有关发出请求的客户端&#xff08;通常是浏览器&#xff09;的信息。 USER_AGENT 字符串描述了客户端的类型&#xff08;如浏览器名称和版本&#xff09;、操作系统、移动设备型号等详细信息。服务…

make工具及makefile文件

一、前言 前面在编写 hello world 【【GCC学习】在Linux系统上编写第一个程序 --&#xff1e; hello word-CSDN博客】的时候直接使用 gcc 命令来对程序进行编译&#xff0c;但是以后工作的时候要编译一个工程&#xff0c;【痛点1】在一个工程中会有很多源文件&#xff0c;如果…

HttpWebRequest访问https请求被中止: 未能创建 SSL/TLS 安全通道

编写代码&#xff0c;使用HttpWebRequest访问网页&#xff0c;错误提示&#xff1a; 未能创建 SSL/TLS 安全通道 页面本来是Http网址&#xff0c;突然转换为https网址&#xff0c;所以遇到这个问题也算正常。将解决方法记录下来给需要的人。 //只需要在 HttpWebRequest 发送…

deepin 23丨如意玲珑正式集成至deepin 23,生态适配超千款

查看原文 近日&#xff0c;deepin 23正式发布&#xff0c;如意玲珑&#xff08;Linyaps&#xff09;&#xff08;以下简称玲珑&#xff09;作为deepin 23的重要特性之一&#xff0c;已经正式集成至deepin系统仓库&#xff0c;所有deepin 23的用户都可以无门槛地使用玲珑应用。…

vue3+ts封装axios以及解决跨域问题

目录 一、前言二、封装axios三、 解决跨域四、调用接口五、运行结果 一、前言 前端请求后端数据时&#xff0c;会用到axios&#xff0c;但是如果不将axios封装好&#xff0c;会导致代码冗余 二次封装的好处如下&#xff1a; 求头能统一处理便于接口的统一管理解决回调地狱配置…