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

追求适度,才能走向成功;人在顶峰,迈步就是下坡;身在低谷,抬足既是登高;弦,绷得太紧会断;人,思虑过度会疯;水至清无鱼,人至真无友,山至高无树;适度,不是中庸,而是一种明智的生活态度。

导读:本篇文章讲解 彻底搞懂@JsonFormate和@DateTimeFormate区别和用法,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

问题

今天在使用@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

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!