BUG战斗史 —— 日期格式与字符串之间的转换
说在前面
最近在公司实习,接触了一个中小型的后台管理系统,不得不说,项目的目录结构比我平时做的"课程设计"要来得复杂,于是我先去看了Github上一些后台管理系统的模板项目
在guns(https://gitee.com/stylefeng/guns)后台管理系统中,我用"代码生成"功能生成模板页面和后台代码后,将一个含有日期类型的实体类的记录添加到数据表,中间总是碰到一个类型转换的错误
我的第一反应就是自定义一个继承JsonDeserialize<Date>抽象类的具体类,然后在日期类型字段上添加@JsonDeserialize(using = ***.class)注解,但是一直不成功
public class StringToDateConvert extends JsonDeserializer<Date> {
private final String[] patterns = {
"yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss",
"yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss"
};
@Override
public Date deserialize(JsonParser p, DeserializationContext ctxt)
throws IOException, JsonProcessingException {
String str = p.getText();
if (StringUtils.isEmpty(str)) {
return null;
} else {
try {
return DateUtils.parseDate(str, Locale.CHINA, patterns);
} catch (ParseException e) {
e.printStackTrace();
return null;
}
}
}
}
// 添加注解到对应字段
@JsonDeserialize(using = StringToDateConvert.class)
private Date dateField;
经过debug调试,发现根本就没有经过我的自定义反序列化类
打倒BUG
之前有很长一段时间我做的都是前后端分离的项目,大多数情况下都通过Json格式传递数据,Http请求头的Content-Type为 application/json类型
但是在guns中,Http请求头的Content-Type为application/x-www-form-urlencoded类型,所以我自定义的Json反序列化配置自然就不会起作用,常见的三种Content-Type如下:
application/json |
数据以Json格式发送 |
application/x-www-form-urlencoded |
form标签中默认的encType,数据被编码为键值对格式,各键值对以&分隔后发送 |
multipart/form-data |
常用于文件上传 |
最后,我通过在字段上添加@DateTimeFormat(pattern = "yyyy-MM-dd")注解解决了这个问题,这是一个非常便捷的注解,可以作用在多种表示时间的类上
Declares that a field or method parameter should be formatted as a date or time. Supports formatting by style pattern, ISO date time pattern, or custom format pattern string. Can be applied to java.util.Date, java.util.Calendar, java.lang.Long, Joda-Time value types; and as of Spring 4 and JDK 8, to JSR-310 java.time types too.
BUG战斗史 —— 日期格式与字符串之间的转换的更多相关文章
- SQL Server 取日期时间格式 日期与字符串之间的转换
SQL Server 取日期时间部分 在本文中,GetDate()获得的日期由两部分组成,分别是今天的日期和当时的时间: Select GetDate() 用DateName()就可以获得相应的 ...
- javascript中日期格式与时间戳之间的转化
日期格式与时间戳之间的转化 一:日期格式转化为时间戳 function timeTodate(date) { var new_str = date.replace(/:/g,'-'); new_str ...
- MVC扩展ModelBinder使类型为DateTime的Action参数可以接收日期格式的字符串
原文:MVC扩展ModelBinder使类型为DateTime的Action参数可以接收日期格式的字符串 如何让视图通过某种途径,把符合日期格式的字符串放到路由中,再传递给类型为DateTime的控制 ...
- java中数组、集合、字符串之间的转换,以及用加强for循环遍历
java中数组.集合.字符串之间的转换,以及用加强for循环遍历: @Test public void testDemo5() { ArrayList<String> list = new ...
- <摘录>Gson对Java嵌套对象和JSON字符串之间的转换
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,具有良好的跨平台特性.近几年来已经和XML一样成为C/S架构中广泛采用的数据格式.有关JSON的更多知识, ...
- json对象和json字符串之间的转换-JavaScript实现
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...
- ByteArray、16进制、字符串之间的转换
ByteArray.16进制.字符串之间的转换: package fengzi.convert { import flash.utils.ByteArray; public class ByteArr ...
- Java基础——基本类型和包装类、基本类型和字符串之间的转换
基本类型和包装类之间的转换 基本类型和包装类之间经常需要互相转换,以 Integer 为例(其他几个包装类的操作雷同哦): 在 JDK1.5 引入自动装箱和拆箱的机制后,包装类和基本类型之间的转换就更 ...
- C++中数字与字符串之间的转换,别人的,
C++中数字与字符串之间的转换 1.字符串数字之间的转换 (1)string --> char * string str("OK"); char * p = st ...
随机推荐
- VS编译时,出现无法将文件“obj\Debug\*.exe”复制到“bin\Debug\*.exe”。文件“bin\Debug\*.exe”正由另一进程使用,因此该进程无法访问此文件。
重命名将MyThread.exe 重命名 一下其他名字后就可以了.
- C# 开始支持动态化编程
在.NET 4.0的运行时进行动态编程时,我们引入了一个新功能:动态语言运行时.可以这样理解,CLR的目的是为静态类型的编程语言提供一个统一的框架或编程模型,而DLR便是在.NET平台上为动态语言提供 ...
- Python:PIL(一)——简介
学习总结自:PIL官方文档 PIL(Python Image Library)是Python的一个图像处理库. 1.简介 PIL库中最重要的类是Image ①从文件中加载Image--open方法 f ...
- c# 去除TextBox的获取焦点事件
/// <summary> /// 去除TextBox的获取焦点事件 /// </summary> /// <param name="sender"& ...
- 关于电脑上已安装SqlServer2005再安装SqlServer23008r2的处理情况
安装SqlServer2008r2可参考这个回答,带图很详细 https://xinzhi.wenda.so.com/a/1518683577611182 1.先修改2005注册表.win+R打开运 ...
- python+selenium+pycharm使用
上一章节讲了安装python及selenium,该章节讲解下使用pycharm编辑器进行代码编写 下载地址:http://www.jetbrains.com/pycharm/download/#sec ...
- mybatis介绍--基于个人学习JavaWeb的使用
mybatis介绍 该博文放在javaWeb系列下,目的是记录我们javaWeb阶段所学的知识 @time=2022/3/11/11:52(最近休息玩了两天,今天重新启动生活) 一.mybatis发展 ...
- think php 登录日记
*/ public function save(Request $request) { // $params = $request->param(); $file = $request-> ...
- Spring Bean生命周期,好像人的一生。。
大家好,我是老三,上节我们手撸了一个简单的IOC容器五分钟,手撸一个Spring容器!,这节我们来看一看Spring中Bean的生命周期,我发现,和人的一生真的很像. 简单说说IoC和Bean IoC ...
- python的数据结构和基本语法
1.支持的数据类型 str(字符串类型).int(整型).flout(浮点型).bool(逻辑值).complex(复数[数学上的]).bytes(字节型).list(列表).tuple(元组[不可以 ...