当前位置: 首页 > news >正文

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

如题,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);}}}
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • CUDA编程07 - 卷积的优化
  • TikTok达人营销与品牌建设:长期视角下的策略布局
  • Zookeeper服务注册及心跳机制详解
  • 【操作系统】什么是进程?什么是线程?两者有什么区别(面试常考!!!)
  • 设计模式---构建者模式(Builder Pattern)
  • 详解线索分层的目的、维度与创新实践
  • 【Java】了解线程 Thread 类的使用,如何创建、终止、等待一个线程,一文读懂不迷路
  • 【论文学习与撰写】快捷搜索指令filetype:pdf,搜索引擎关键词搜索pdf格式文件或者word格式文件。文献搜索方法大全。
  • 26 slave写入数据解决与GTIDS主从复制搭建
  • 白骑士的C#教学实战项目篇 4.4 游戏开发
  • 《向量数据库指南》——解决方案:采用安全、高性能的Milvus Cloud向量数据库,赋能Dopple AI的创新与发展
  • 速盾:博客主机租用怎么提高访问速度呢?
  • “LOCAL_LISTENER”参数导致业务无法连接数据库,文末附Oracle连接故障检查监听的排查流程
  • 如何高效的利用低代码技术进行数据建模
  • Temu全托管和半托管的区别:一文说清temu全托和半托的差异
  • [译] 理解数组在 PHP 内部的实现(给PHP开发者的PHP源码-第四部分)
  • 《Javascript数据结构和算法》笔记-「字典和散列表」
  • Android开发 - 掌握ConstraintLayout(四)创建基本约束
  • Angularjs之国际化
  • create-react-app项目添加less配置
  • Django 博客开发教程 16 - 统计文章阅读量
  • js
  • MySQL QA
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • SpiderData 2019年2月25日 DApp数据排行榜
  • spring cloud gateway 源码解析(4)跨域问题处理
  • SpriteKit 技巧之添加背景图片
  • - 概述 - 《设计模式(极简c++版)》
  • 和 || 运算
  • 什么软件可以剪辑音乐?
  • 使用 @font-face
  • 使用docker-compose进行多节点部署
  • 数组的操作
  • 腾讯优测优分享 | Android碎片化问题小结——关于闪光灯的那些事儿
  • 原生Ajax
  • 怎么把视频里的音乐提取出来
  • 微龛半导体获数千万Pre-A轮融资,投资方为国中创投 ...
  • #define、const、typedef的差别
  • #数据结构 笔记三
  • (1)(1.13) SiK无线电高级配置(六)
  • (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
  • (android 地图实战开发)3 在地图上显示当前位置和自定义银行位置
  • (C语言)字符分类函数
  • (c语言版)滑动窗口 给定一个字符串,只包含字母和数字,按要求找出字符串中的最长(连续)子串的长度
  • (day6) 319. 灯泡开关
  • (pycharm)安装python库函数Matplotlib步骤
  • (vue)el-tabs选中最后一项后更新数据后无法展开
  • (附源码)springboot教学评价 毕业设计 641310
  • (附源码)计算机毕业设计SSM在线影视购票系统
  • (力扣)循环队列的实现与详解(C语言)
  • (四)linux文件内容查看
  • (算法)求1到1亿间的质数或素数
  • ..回顾17,展望18
  • .Family_物联网
  • .NET CF命令行调试器MDbg入门(四) Attaching to Processes