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 自定义日期出入参相关推荐

  1. SpringBoot日期时间全局出入参格式化-3:全局Timestamp出入参

    SpringBoot时间出入参格式化-3:全局Timestamp出入参 上一篇中使用的是全局使用字符串处理时间参数.本文提供第三种处理方式:使用全局时间戳方式处理入参时间,如入参:1657096088 ...

  2. springboot出入参参数日志打印方案以及实现

    背景 开发项目的时候,对出入参可以通过idea 的debug模式实现.但是项目一旦发布到线上如果发现有数据存在问题,那么究竟是哪一个环节出现的问题呢.有些情况就会不好分析.或者在系统间互相调用的时候, ...

  3. Springboot 关于日期时间格式化处理方式总结

    点击关注公众号,实用技术文章及时了解 来源:juejin.im/post/5e62817fe51d4526d05962a2 项目中使用LocalDateTime系列作为DTO中时间的数据类型,但是Sp ...

  4. 字节码编程,Byte-buddy篇二《监控方法执行耗时动态获取出入参类型和值》

    作者:小傅哥 博客:https://bugstack.cn - 汇总系列专题文章 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 案例是剥去外衣包装展示出核心功能的最佳学习方式! 就像是我们研 ...

  5. webservice接口怎么将xml作为参数传递呢_Rhapsody集成引擎通讯点(接口)出入参详解web服务篇...

    Rhapsody引擎可便捷的集成不同的医疗信息系统,可提供安全的连接.可靠的消息传输和高性能的数据处理等功能.Rhapsody引擎是整个集成平台的核心部分,是可快捷提供服务的关键所在.它可实现数据的内 ...

  6. R语言用户自定义函数的语法结构、编写自定义统计值计算函数(使用ifelse结构计算均值和标准差等)、编写自定义日期格式化(format)函数(switch函数使用不同分枝格式化日期数据)、应用自定函数

    R语言用户自定义函数的语法结构.编写自定义统计值计算函数(使用ifelse结构计算均值和标准差等).编写自定义日期格式化(format)函数(switch函数使用不同分枝格式化日期数据).应用自定函数 ...

  7. springboot自定义异常处理

    springboot自定义异常处理 参考文章: (1)springboot自定义异常处理 (2)https://www.cnblogs.com/SimpleWu/p/10044468.html 备忘一 ...

  8. 过冰点自定义日期时间

    这个可完全自定义日期与时间..... 转载于:https://blog.51cto.com/108151/59792

  9. springmvc自定义日期编辑器

    1.控制器 @Controller public class MyController {// 处理器方法@RequestMapping(value = "/first.do")p ...

最新文章

  1. 上银伺服驱动器接线图_伺服驱动器实际接线方法详解
  2. [Luogu] P4198 楼房重建
  3. php 中文 decode_php json_decode 解析中文
  4. 机器学习算法—集成算法原理详解
  5. 新一代球王!日本推AI篮球机器人,命中率接近100%!
  6. 圆桌论坛对话:互联网产业革命
  7. 深度学习之 RPN(RegionProposal Network)- 区域候选网络
  8. ECSHOP邮件验证后送积分
  9. [摘抄] 匈牙利命名法
  10. python如何上传文件_Python 上传文件
  11. 基于FFMPEG+Python实现大视频分隔+水印+合并片头片尾
  12. 「 硬核分享」 ❤️ QQ连连看自动消除外挂完整源码❤️「 复制即用」
  13. 3D动作绑定_【动捕小灶】动作捕捉数据应用到动画流程详解
  14. 3. 二叉哥的二叉树
  15. Weights Biases的使用
  16. openGL基础光照“ADS”( Phone光照模型)(一)
  17. DINO 论文精度,并解析其模型结构 DETR 的变体
  18. SpringMVC框架从入门到精通
  19. 现60岁,一次性缴纳60万养老金,一个月领取4000元,你愿意吗
  20. js中的内存溢出和内存泄漏

热门文章

  1. 攻防世界-web xff_Referer
  2. 调查显示企业SOA应用率仍然很低
  3. Android开发基础入门
  4. 文件缓存FileCache
  5. RobotFramework中,选择注释套件中的某些用例的方法(主要用于RED/IntelliBot从套件执行单个用例)
  6. 好用的手机投屏电脑软件
  7. 手势操作实用教程 | 实现「滑动清除」效果
  8. 远程遥控小车搭建记录
  9. PPT修改幻灯片大小
  10. Android面试题目及其答案