起因:

  在数据库设计中,日期时间等类型字段一般设置为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. mysql error 1067 invalid default timestamp

    问题 MySQL 5.7版本,在创建数据表时,使用以下语句定义一个字段: `update_time` timestamp DEFAULT '0000-00-00 00:00:00' ON UPDATE ...

  2. jquery 一键复制文本到剪切板

    <a id="copy" data-clipboard-text="123456">复制文本</a> $(function(){ var ...

  3. Fibonacci_array

    重新开始学习C&C++ Courage is resistance to fear, mastery of fear, not abscence of fear //斐波那契数列 Fibona ...

  4. ../../在url中的表现

    可能会被忽略的url跳转方式,后端验证时需要考虑这种情况: https://zhidao.baidu.com/question/566551732268407284.html/../../?entry ...

  5. windows下的拷贝利器robocopy

    robocopy xxcopy http://www.cnblogs.com/zhanglei1371/p/6724167.html [转载]robocopy的用法 经常进行文件管理操作的朋友们,不满 ...

  6. 新ubuntu系统装软件

    新装的ubuntu系统安装软件: 1.ifconfig #sudo apt-get install net-tools 2.vim #sudo apt-get install vim 3.telnet ...

  7. openj9

       下面部分转自:https://www.jianshu.com/p/916b5fcd0140 OpenJ9,OMR与OpenJDK Eclipse OpenJ9 是一个 Java 虚拟机(JVM) ...

  8. 64 位 Windows 平台开发注意要点之文件系统重定向

    Program Files 的重定向 很多开发人员都知道,在 64 位 Windows 系统上,32 位程序是无法获取得到 C:\Program Files 的完整路径的,只能获取到 C:\Progr ...

  9. Last Work-随机出题加法游戏

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  10. C# 获取指定路径下的文件结构(树形结构)

    namespace Vue.Content { public class FileNames { public int id { get; set; } public string text { ge ...