起因:

  在数据库设计中,日期时间等类型字段一般设置为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格式问题的更多相关文章

  1. SpringBoot+MyBatis Plus对Map中Date格式转换的处理

    在 SpringBoot 项目中, 如何统一 JSON 格式化中的日期格式 问题 现在的关系型数据库例如PostgreSQL/MySQL, 都已经对 JSON 类型提供相当丰富的功能, 项目中对于不需 ...

  2. JSP页面用EL表达式 输出date格式

    JSP页面用EL表达式 输出date格式 1.头上引入标签 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix ...

  3. js 将php生成的time()类型时间戳转化成具体date格式的日期

    需求:      将首页显示的int类型的时间转化为date类型的时间格式:      QuestionModel获取到question列表数据时,包括question['pub_time'],在显示 ...

  4. mybatis从数据库中取到的date格式不是yyyy-MM-dd HH:mm:ss

    问题:sqlserver中的存储时间格式为date,pojo的时间属性也是date,直接mybatis取出的时间格式是带英语的那种,不满足客户要求. 解决:将pojo的时间属性改为string类型,在 ...

  5. 使用 JSON.parse 反序列化 ISO 格式的日期字符串, 将返回Date格式对象

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  6. 【数据库_Mysql】JAVA-数据库Date格式在前台JSP页面的获取

    问题: 数据库保存的为date格式的日期 在前台JSP页面显示的为一串数字1487897     解决办法: 数据库表中字段对应的实体对象属性的get方法上添加一行代码 页面即可正常显示      

  7. Java中String与Date格式之间的转换

    转自:https://blog.csdn.net/angus_17/article/details/7656631 经常遇到string和date之间的转换,把相关的内容总结在这里吧: 1.strin ...

  8. 字符串时间转Date格式

    /** * 字符串时间格式转 Date 格式 * @param strDate * @return */ public static Date getDateTimeByStringTime(Stri ...

  9. 字符串格式时间转Date格式

    /** * 字符串时间格式转 Date 格式 * @param strDate * @return */ public static Date getDateTimeByStringTime(Stri ...

随机推荐

  1. php商品对比功能代码分享

    商品对比调用的JS文件(包含了商品对比框浮动JS): /*浮动窗口*/ (function(){     var n=10;   var obj=document.getElementById(&qu ...

  2. JS中冒号的作用

    JS中冒号的作用1.声明对象的成员2.switch语句分支3.三元表达式 1.声明对象的成员 var Book = { Name: '法', Price: 100, Discount : functi ...

  3. DLL简单分析与调用方法

    最近为了分析一个没有代码的DLL有哪些函数,找了各种方法. 把结果分享一下:三个方法都没法得到函数的参数,有点让我失望. DLL Export Viewer NikPEViewer Dumpbin 配 ...

  4. MVC Action 返回类型

    https://www.cnblogs.com/xielong/p/5940535.html https://blog.csdn.net/WuLex/article/details/79008515 ...

  5. WinHTTrack Website Copier使用说明

    WinHTTrack Website Copier使用说明 WinHTTrack Website Copier可以抓取整个网站或者某个网页.某个论坛帖子.以抓取论坛某个主题帖子为例: 1.打开WinH ...

  6. 关于栈、队列、优先队列的应用——UVa11995

    这本来是上一篇博客里的内容,但不知道什么原因breakdown了……我就简单放上一道题好了 题意:这道题的题目是“猜猜数据结构”,题意就是给你一些输入输出数据,让你根据这些数据判断是什么数据结构.要猜 ...

  7. javaweb开发大致流程

  8. idea properties文件中文无法正常显示

    引用:https://blog.csdn.net/u010999809/article/details/81204457 问题:在idea打开配置文件,已经设置了全局编码格式为UTF-8,和项目编码格 ...

  9. Python 之 __new__() 方法与实例化

    原文链接:https://www.cnblogs.com/ifantastic/p/3175735.html __new__() 是在新式类中新出现的方法,它作用在构造方法建造实例之前,可以这么理解, ...

  10. AX2012 ERP “系统慢”调优---跟踪SQL执行,优化代码

    对于用户来说,系统是:慢的,难用的.你看xxx,多好用,多快,多人性化. 对于AX ERP系统也不例外,调优是必须的,调优一般分为几种: 系统性监测针对瓶劲环节提升,如:用户--应用服务器--DB-- ...