springboot 自定义日期出入参
springboot 版本2.0.4,针对全局的日期出入参做一个详细的配置介绍,局部日期转换可采用@JsonFormat注解实现,本文不再赘述。
1.自定义日期入参
对于表单参数或get请求url后面跟着的日期入参,通过装配以下配置来实现日期入参转换:
@Configuration
public class WebConfig implements WebMvcConfigurer {@Overridepublic void addFormatters(FormatterRegistry registry) {registry.addFormatter(new DateFormatter("yyyy-MM-dd HH:mm:ss"));}
}
意思就是入参可传入yyyy-MM-dd HH:mm:ss格式的日期,框架会自动将该字符串映射到对应的Date入参字段上,例如http://localhost:8080/test?startTime=2019-06-27 10:59:59,后台会用Date startTime字段接收这个入参。
注意:startTime=2019-06-27 或 startTime=1561605650476等不满足的格式都会报错,另外,
通过继承的方式即extends WebMvcConfigurationSupport会导致autoConfig失效,可以通过implements WebMvcConfigurer的方式
假设前端入参传的是时间戳后端如何处理呢?
@Configuration
public class WebConfig implements WebMvcConfigurer {@Overridepublic void addFormatters(FormatterRegistry registry) {registry.addConverter(new Long2DateConverter());}public class Long2DateConverter implements Converter<String, Date> {@Overridepublic Date convert(String ts) {if (ts == null) {return null;}return new Date(Long.valueOf(ts));}}
}
此时需要自己实现一个转换器,注意,时间戳虽然在后端看来是个long类型,但是前端传过来依然是个String,所以转换器是从String->Date,而不能写Long->Date,否则会报错。
好了,上述方法只适用于表单参数和url参数,而json入参需要通过配置jackson来生效。
2.自定义出参
springboot默认采用的是jackson进行json转换,本文只阐述使用jackson的方式配置日期参数。
此处只介绍使用yml配置的方式,使用properties文件方式类似。配置如下:
spring:jackson:date-format: yyyy-MM-dd HH:mm:sstime-zone: GMT+8serialization:write_dates_as_timestamps: false
对于json入参而言,需要满足yyyy-MM-dd HH:mm:ss格式才能正常转换,但实践发现,入参如果为时间戳也能自动转换(这里没有找到原因,毕竟没有看过源码),
对于json出参而言,日期返回到前端是yyyy-MM-dd HH:mm:ss格式的字符串。
另外,write_dates_as_timestamps属性决定返回的日期是否会被转换为时间戳,该属性默认为true,不配置该属性默认返回时间戳。
值得注意的是,write_dates_as_timestamps属性是归属于serialization属性下,即序列化属性,序列化的意思是代表从java对象->json串,也就是只作用于出参。所以该属性对入参无效。
3.总结
由于笔者并未阅读过springboot相关源码,所以以上阐述都是根据实际经验总结出来,只讨论怎么用,不深究为什么。
- 对于form表单参数或url参数的日期格式,需要在implements WebMvcConfigurer的配置类中进行注册。两种方式:registry.addFormatter(new DateFormatter("yyyy-MM-dd HH:mm:ss"));和registry.addConverter(new Long2DateConverter());实现对标准日期串和时间戳入参的绑定;
- jackson配置同时作用于json格式的日期入参和出参,标准日期串方式date-format: yyyy-MM-dd HH:mm:ss,write_dates_as_timestamps: false。时间戳方式write_dates_as_timestamps: true或不配置该属性
springboot 自定义日期出入参相关推荐
- SpringBoot日期时间全局出入参格式化-3:全局Timestamp出入参
SpringBoot时间出入参格式化-3:全局Timestamp出入参 上一篇中使用的是全局使用字符串处理时间参数.本文提供第三种处理方式:使用全局时间戳方式处理入参时间,如入参:1657096088 ...
- springboot出入参参数日志打印方案以及实现
背景 开发项目的时候,对出入参可以通过idea 的debug模式实现.但是项目一旦发布到线上如果发现有数据存在问题,那么究竟是哪一个环节出现的问题呢.有些情况就会不好分析.或者在系统间互相调用的时候, ...
- Springboot 关于日期时间格式化处理方式总结
点击关注公众号,实用技术文章及时了解 来源:juejin.im/post/5e62817fe51d4526d05962a2 项目中使用LocalDateTime系列作为DTO中时间的数据类型,但是Sp ...
- 字节码编程,Byte-buddy篇二《监控方法执行耗时动态获取出入参类型和值》
作者:小傅哥 博客:https://bugstack.cn - 汇总系列专题文章 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 案例是剥去外衣包装展示出核心功能的最佳学习方式! 就像是我们研 ...
- webservice接口怎么将xml作为参数传递呢_Rhapsody集成引擎通讯点(接口)出入参详解web服务篇...
Rhapsody引擎可便捷的集成不同的医疗信息系统,可提供安全的连接.可靠的消息传输和高性能的数据处理等功能.Rhapsody引擎是整个集成平台的核心部分,是可快捷提供服务的关键所在.它可实现数据的内 ...
- R语言用户自定义函数的语法结构、编写自定义统计值计算函数(使用ifelse结构计算均值和标准差等)、编写自定义日期格式化(format)函数(switch函数使用不同分枝格式化日期数据)、应用自定函数
R语言用户自定义函数的语法结构.编写自定义统计值计算函数(使用ifelse结构计算均值和标准差等).编写自定义日期格式化(format)函数(switch函数使用不同分枝格式化日期数据).应用自定函数 ...
- springboot自定义异常处理
springboot自定义异常处理 参考文章: (1)springboot自定义异常处理 (2)https://www.cnblogs.com/SimpleWu/p/10044468.html 备忘一 ...
- 过冰点自定义日期时间
这个可完全自定义日期与时间..... 转载于:https://blog.51cto.com/108151/59792
- springmvc自定义日期编辑器
1.控制器 @Controller public class MyController {// 处理器方法@RequestMapping(value = "/first.do")p ...
最新文章
- 上银伺服驱动器接线图_伺服驱动器实际接线方法详解
- [Luogu] P4198 楼房重建
- php 中文 decode_php json_decode 解析中文
- 机器学习算法—集成算法原理详解
- 新一代球王!日本推AI篮球机器人,命中率接近100%!
- 圆桌论坛对话:互联网产业革命
- 深度学习之 RPN(RegionProposal Network)- 区域候选网络
- ECSHOP邮件验证后送积分
- [摘抄] 匈牙利命名法
- python如何上传文件_Python 上传文件
- 基于FFMPEG+Python实现大视频分隔+水印+合并片头片尾
- 「 硬核分享」 ❤️ QQ连连看自动消除外挂完整源码❤️「 复制即用」
- 3D动作绑定_【动捕小灶】动作捕捉数据应用到动画流程详解
- 3. 二叉哥的二叉树
- Weights Biases的使用
- openGL基础光照“ADS”( Phone光照模型)(一)
- DINO 论文精度,并解析其模型结构 DETR 的变体
- SpringMVC框架从入门到精通
- 现60岁,一次性缴纳60万养老金,一个月领取4000元,你愿意吗
- js中的内存溢出和内存泄漏