@RequestBody接收Json参数 | 用自定义注解对Vo对象中Date类型日期格式校验

@RequestBody接收Json参数 | 用自定义注解对Vo对象中Date类型日期格式校验,第1张

标题太长有木有?主要是为了把问题描述清楚,免得进错文章。

昨天测试的同事测试接口的时候,测试出来一个Date类型校验问题。

要求输入的日期格式是:yyyy-MM-dd HH:mm:ss,Vo中使用的注解如下:

测试同事输入下面两种参数都是保存成功,当输入为“202105”参数时,保存的数据变为“1970-01-01 08:03:22”,由此发现这个问题。

常用的三种日期格式化的注解解释如下:

由于 @RequestBody 注解先将json字符串转换成对应的Vo对象,Vo对象中的字段上添加的注解再生效, @DateTimeFormat 只是做格式化,无法做格式校验。

用自定义注解进行json字符串中的日期格式做校验。

解决思路

1从request对象中获取原始json字符串入参 。由于自定义注解接口ConstraintValidator的实现获取到的参数值是@RequestBody注解将json字符串参数解析成Vo对象后的Date对象,不是原始json字符串值,所以需要从request中获取json原始参数值;

2获取到json入参原始值使用正则表达式对日期进行格式进行校验

温馨提示

1由于自定义注解中是无法直接获取到request对象,所以需要按照各自框架获取request对象的方式进行获取。

2获取到的原始json字符串入参可能包含 空格 回车 换行符 制表符 这些特殊字符,所以需要进行特殊字符处理。

3获取Vo对象中添加注解的属性名。

详细见: getFieldName(ConstraintValidatorContext context)即:((ConstraintValidatorContextImpl) context)basePathcurrentLeafNodename

SearchTaskVojava

DateFormatValidationjava

DateFormatValidatorjava

至此问题解决~

文章中有何隐藏问题欢迎留言交流~

有好的解决方案欢迎留言~

后台Controllerjava,返回jsonStr格式的数据data

Map<String, Object> hzMap=null  ;//Map型数据为{Rows=[{PKID=f62ec3a0-93cd-11e9-97aa-54e1adb13ebe, DQID=1, QX=1, LXR=2, LXDH=18731197300, XXDZ=1, YYZZSMJ=1, YBNSRZM=1, KHJB=1, BFCS=1, SFYSB=否, SBSM=1, QTCPYL=1, CPYL=1, ZJBFSJ=2019-06-21 10:40:000, BZ=1}, Total=1}

String data = JSONtoJSONString(hzMap); //Map型数据转换成jsonStr;hzMap其中的String型日期格式,被转换成long型时间戳{"Rows":[{"PKID":"f62ec3a0-93cd-11e9-97aa-54e1adb13ebe","DQID":"1","QX":"1","LXR":"2","LXDH":"18731197300","XXDZ":"1","YYZZSMJ":"1","YBNSRZM":"1","KHJB":1,"BFCS":1,"SFYSB":"否","SBSM":"1","QTCPYL":1,"CPYL":1,"ZJBFSJ":1561084800000,"BZ":"1"},"Total":1}

前台jsp,使用legerUI插件

<script type="text/javascript">

//表头 配置column  参考链接>

将字符串类型的时间转换成date类型可以使用SimpleDateFormat来转换,具体方法如下:

1、定义一个字符串类型的时间;

2、创建一个SimpleDateFormat对象并设置格式;

3、最后使用SimpleDateFormat的parse方法将String类型的时间转换成Date类型的时间。

具体代码如下:

String string = "2014-3-17";

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");

Date date = null;

try {

date = dateFormatparse(string);

Systemoutprintln(datetoLocaleString()split(" ")[0]);//切割掉不要的时分秒数据

} catch (ParseException e) {

eprintStackTrace();

}

介绍一下SimpleDateFormat:SimpleDateFormat 是 Java 中一个非常常用的类,该类用来对日期字符串进行解析和格式化输出。

var dateObj = JSONparse(birthday);

var date = new Date(dateObjtime);

var dateStr = dategetFullYear() + '-' + getMonth() + '-' + getDate();

dateStr就是你想要的东西。需要自己做个转化的。。不知道time是不是一个时间毫秒数,要是不是的,只能从dateObj中做点文章,把dateObjyear+ ‘-’ + dateObjmonth + ‘-’ + dateObjdate 这种方式拼出来,这个地方year最好是在数据库中就返回1985这样的数据,不要是85。。。。

以上就是关于@RequestBody接收Json参数 | 用自定义注解对Vo对象中Date类型日期格式校验全部的内容,包括:@RequestBody接收Json参数 | 用自定义注解对Vo对象中Date类型日期格式校验、从后台返回来得是json类型的数据,日期的格式Date(1321922455000),我们如何将它转换成:2011-2-1、json日期在前台转换成yyyy-mm-dd等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/10085588.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存