spring Date格式问题
起因:
在数据库设计中,日期时间等类型字段一般设置为Datetime格式,所以有时在接口请求实体bean中,对应的接口字段的数据类型可能会被设置为Date类型。
而在java常用场景中的时间格式一般有三种:yyyyMMddHHmmss ,yyyy-MM-dd HH:mm:ss , ISO8601,此处使用格式1、2、3来代替。
目前最常使用的时间格式为格式1。
问题:
当接口中某字段类型设置为Date类型时,由于我们本身的需要,会再该字段上加上注解
@JsonFormat(pattern = "yyyyMMddHHmmss", timezone = "GMT+8")
由于swagger本身的限制,在测试页面做集成测试的时候,该字段是不允许传格式1类型的字符串的,允许使用的只有格式2、3。
使用格式2的时候,由于框架本身会将请求数据注入到接口的请求实体bean中,此时会出现的一个问题就是页面上传的时间和注入到实体bean内的值不一致,导致业务出错。
而使用格式3的时候,也会出现注入问题,因为格式对应不正确最后抛出非法参数异常,无法将ISO8601注入到格式1类型中。
但是使用curl测试的时候,字段传格式1的字符串是可以正确注入到实体bean,只是对测试人员并不友好。
解决方法:
1,去掉所有的JsonFormat注解,页面传格式3的字符串,可以正确注入至接口实体bean中,缺点不符合现在主流使用规范,比如接口对接的时候,一般会使用格式1类型
2,将接口实体bean中的字段类型改为String类型,这样就不会有格式限制。但是另外带来问题有两个,会对已写好的代码做出较大的改动,另外,String格式缺少对日期的校验
针对这些问题,提出另外的解决方案如下:如果不想对业务代码做出改动,由于在业务代码中使用的时候会直接调用get方法,所以我们可以重载该字段的get方法,改为反应一个Date类型的值,如此,可不同修改业务代码 。
针对字段校验问题
可以使用框架自带的注解@Pattern来限制格式,@Length来限制长度,但是缺少日期校验中专用的两个功能@Past和 @Futrue。
所以最终解决方案为自定义一个日期类型的注解,自定两个boolean类型变量past与future。然后对字段进行校验。
spring Date格式问题的更多相关文章
- SpringBoot+MyBatis Plus对Map中Date格式转换的处理
在 SpringBoot 项目中, 如何统一 JSON 格式化中的日期格式 问题 现在的关系型数据库例如PostgreSQL/MySQL, 都已经对 JSON 类型提供相当丰富的功能, 项目中对于不需 ...
- JSP页面用EL表达式 输出date格式
JSP页面用EL表达式 输出date格式 1.头上引入标签 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix ...
- js 将php生成的time()类型时间戳转化成具体date格式的日期
需求: 将首页显示的int类型的时间转化为date类型的时间格式: QuestionModel获取到question列表数据时,包括question['pub_time'],在显示 ...
- mybatis从数据库中取到的date格式不是yyyy-MM-dd HH:mm:ss
问题:sqlserver中的存储时间格式为date,pojo的时间属性也是date,直接mybatis取出的时间格式是带英语的那种,不满足客户要求. 解决:将pojo的时间属性改为string类型,在 ...
- 使用 JSON.parse 反序列化 ISO 格式的日期字符串, 将返回Date格式对象
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 【数据库_Mysql】JAVA-数据库Date格式在前台JSP页面的获取
问题: 数据库保存的为date格式的日期 在前台JSP页面显示的为一串数字1487897 解决办法: 数据库表中字段对应的实体对象属性的get方法上添加一行代码 页面即可正常显示
- Java中String与Date格式之间的转换
转自:https://blog.csdn.net/angus_17/article/details/7656631 经常遇到string和date之间的转换,把相关的内容总结在这里吧: 1.strin ...
- 字符串时间转Date格式
/** * 字符串时间格式转 Date 格式 * @param strDate * @return */ public static Date getDateTimeByStringTime(Stri ...
- 字符串格式时间转Date格式
/** * 字符串时间格式转 Date 格式 * @param strDate * @return */ public static Date getDateTimeByStringTime(Stri ...
随机推荐
- php商品对比功能代码分享
商品对比调用的JS文件(包含了商品对比框浮动JS): /*浮动窗口*/ (function(){ var n=10; var obj=document.getElementById(&qu ...
- JS中冒号的作用
JS中冒号的作用1.声明对象的成员2.switch语句分支3.三元表达式 1.声明对象的成员 var Book = { Name: '法', Price: 100, Discount : functi ...
- DLL简单分析与调用方法
最近为了分析一个没有代码的DLL有哪些函数,找了各种方法. 把结果分享一下:三个方法都没法得到函数的参数,有点让我失望. DLL Export Viewer NikPEViewer Dumpbin 配 ...
- MVC Action 返回类型
https://www.cnblogs.com/xielong/p/5940535.html https://blog.csdn.net/WuLex/article/details/79008515 ...
- WinHTTrack Website Copier使用说明
WinHTTrack Website Copier使用说明 WinHTTrack Website Copier可以抓取整个网站或者某个网页.某个论坛帖子.以抓取论坛某个主题帖子为例: 1.打开WinH ...
- 关于栈、队列、优先队列的应用——UVa11995
这本来是上一篇博客里的内容,但不知道什么原因breakdown了……我就简单放上一道题好了 题意:这道题的题目是“猜猜数据结构”,题意就是给你一些输入输出数据,让你根据这些数据判断是什么数据结构.要猜 ...
- javaweb开发大致流程
- idea properties文件中文无法正常显示
引用:https://blog.csdn.net/u010999809/article/details/81204457 问题:在idea打开配置文件,已经设置了全局编码格式为UTF-8,和项目编码格 ...
- Python 之 __new__() 方法与实例化
原文链接:https://www.cnblogs.com/ifantastic/p/3175735.html __new__() 是在新式类中新出现的方法,它作用在构造方法建造实例之前,可以这么理解, ...
- AX2012 ERP “系统慢”调优---跟踪SQL执行,优化代码
对于用户来说,系统是:慢的,难用的.你看xxx,多好用,多快,多人性化. 对于AX ERP系统也不例外,调优是必须的,调优一般分为几种: 系统性监测针对瓶劲环节提升,如:用户--应用服务器--DB-- ...