问题
今天在使用@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只能解决表单提交)
具体测试的话,就交给大家自行测试了,本章不作讲解;