问题
今天在使用@JsonFormate和@DateTimeFormate发现出现了非常多意想不到的问题;
如:
- 1)使用ajax提交json数据时,明明提交的字符串是@DateTimeFormate中规定的类型却报错400;
- 2)没写@DateTimeFormate和Converter居然也能将字符串映射到date等;
- 3)自己编写的Converter死活不起作用(排除了springmvc一系列配置问题);
如果你也出现上面的问题那就往下看吧!
通过今天2小时翻阅源码+查看相关资料得出如下结论:
我们都知道@JsonFormate的作用是在Java实体转换成json时,指定date属性转换成字符串的规则;
但在某些情况下,前端提交普通字符串到后端映射到date属性上同样适用,也就是说,某些情况下,@JsonFormate代替了Converter的作用;
准备如下实体类:
正题开始
-
@JsonFormate:提交json(application/json)有效,表单(application/x-www-form-urlencoded)提交无效;
-
@DateTimeFormate:json提交无效,表单提交有效;
-
自定义Converter:json提交无效、表单提交都有效;
以上三种都没配置时:
- 如果是json方式提交:yyyy-MM-dd格式的字符串提交能够被Date接收
- 如果是表单方式提交:yyyy/MM/dd格式的字符串提交能够被Date接收
- 当同时配置了Converter和@DateTimeFormate时:表单提交一定会使用Converter来进行转换,不会使用@DateTimeFormate
因此我们一般这样配置就行了:
针对于之前的问题解决
-
问题一):使用ajax提交json数据时,明明提交的字符串是@DateTimeFormate中规定的类型却报错400;
- 原因:@DateTimeFormate不可以解决json提交;
-
问题二):没写@DateTimeFormate和Converter居然也能将字符串映射到date等;
- 原因:使用了
yyyy-MM-dd
格式并且是json提交,使用了yyyy/MM/dd
格式提交并且是表单提交;
- 原因:使用了
-
问题三):自己编写的Converter死活不起作用(排除了springmvc一系列配置问题);
- 原因: 是json提交方式(Converter只能解决表单提交)
具体测试的话,就交给大家自行测试了,本章不作讲解;
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/131785.html