起因:

  在数据库设计中,日期时间等类型字段一般设置为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. 1.搭建Angular2项目

    简述:搭建angular2的开发环境,网上已经有许多教程,不过都是window系统下的教程,我本人使用的是linux系统,搭建环境的过程也稍微比前者麻烦了一点,可参考本人的另一篇文章Linux系统下安 ...

  2. [转]微软商店 打开就显示无法加载该页面 代码0x80131500?

    在某博客看到的方法,供参考,可以尝试一下,我的也是这么解决的 1.打开“运行”输入 inetcpl.cpl (“WINDOWS”+“R”键,输入 inetcpl.cpl亦可) 2.点开高级往下拉,勾上 ...

  3. .NET微信开发Charles突破微信授权,获取任意微信网页源代码(含Https)

    简介 Charles其实是一款代理服务器,通过成为电脑或者浏览器的代理,然后截取请求和请求结果达到分析抓包的目的.该软件是用Java写的,能够在Windows,Mac,Linux上使用.开发iOS都在 ...

  4. 为什么选择Go语言 GO语言都能做什么产品

    Go语言,又称Golang,是Google开发的一款静态强类型.编译型.并发型,并具有垃圾回收机制的编程语言,它的运行速度非常之快,同时还有如下特性:具有一流的标准库.无继承关系.支持多核:同时它还有 ...

  5. 聊聊Google DSM产品的发布

    只有产品顺利的发布给用户使用并获得良好反馈,整个团队的价值才有所体现. 引言 不知不觉,从13年接手Google Doubleclick Sales Manager到今年7月,4年经历了3个miles ...

  6. awk 正则匹配指定字段次数统计

    1. 文本数据 head 12315_industry_business.csv name,business,label,label_name 沧州光松房屋拆迁有限公司,旧房拆迁.改造:物业服务(依法 ...

  7. 基于STM8的TIM定时器操作---STM8-第三章

    1. 综述 STM8S提供三种类型的 TIM 定时器:高级控制型(TIM1).通用型(TIM2/TIM3/TIM5)和基本型定时器(TIM4/TIM6).它们虽有不同功能但都基于共同的架构.此共同的架 ...

  8. [UE4]瞬移对象

    一.首先把Predict Projectile Path By TraceChannel的Draw Debug Type改成none,不显示射线,改成该选项并不会影响正常使用. 二.避免瞬移穿透底板 ...

  9. CentOS_6.5配置iptables防火墙策略

    ###############配置filter表防火墙############### #清除预设表filter中的所有规则链的规则iptables -F #清除预设表filter中使用者自定链中的规则 ...

  10. C#学习-图解教程(1):格式化数字字符串

    学习内容:C#:学习书籍:图解教程(中文第四版). 目录:第二章 C#编程概述 -----> 2.7 从程序中输出文本 -----> 2.7.5格式化数字字符串 using System; ...