0
点赞
收藏
分享

微信扫一扫

彻底搞懂@JsonFormate和@DateTimeFormate区别和用法


问题

今天在使用@JsonFormate和@DateTimeFormate发现出现了非常多意想不到的问题;

如:

  • 1)使用ajax提交json数据时,明明提交的字符串是@DateTimeFormate中规定的类型却报错400;
  • 2)没写@DateTimeFormate和Converter居然也能将字符串映射到date等;
  • 3)自己编写的Converter死活不起作用(排除了springmvc一系列配置问题);

如果你也出现上面的问题那就往下看吧!

通过今天2小时翻阅源码+查看相关资料得出如下结论:

我们都知道@JsonFormate的作用是在Java实体转换成json时,指定date属性转换成字符串的规则;

但在某些情况下,前端提交普通字符串到后端映射到date属性上同样适用,也就是说,某些情况下,@JsonFormate代替了Converter的作用

准备如下实体类:

彻底搞懂@JsonFormate和@DateTimeFormate区别和用法_json

正题开始

  • @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

因此我们一般这样配置就行了:

彻底搞懂@JsonFormate和@DateTimeFormate区别和用法_ajax_02

针对于之前的问题解决

  • 问题一):使用ajax提交json数据时,明明提交的字符串是@DateTimeFormate中规定的类型却报错400;
  • 原因:@DateTimeFormate不可以解决json提交;
  • 问题二):没写@DateTimeFormate和Converter居然也能将字符串映射到date等;
  • 原因:使用了​​yyyy-MM-dd​​​格式并且是json提交,使用了​​yyyy/MM/dd​​格式提交并且是表单提交;
  • 问题三):自己编写的Converter死活不起作用(排除了springmvc一系列配置问题);
  • 原因: 是json提交方式(Converter只能解决表单提交)

具体测试的话,就交给大家自行测试了,本章不作讲解;


举报

相关推荐

0 条评论