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 ...
随机推荐
- SUSCTF2022 Misc-AUDIO&RA2
前言:这次参加了susctf感受颇深,题目难度不是很大很大,但是很考验基础的技术熟练度,比如re这次就因为不会套脚本去解密,导致卡死在了第一道题,一道没做出来.所以只做了做misc和web. RA2 ...
- ansible复习笔记_playbook-从零到无
--创建时间:2021年3月9日 --修改时间:2021年3月9日 --作者:飞翔的小胖猪 yaml语法格式 每单一文件第一行,使用 "---"开始.在结尾的时候使用三个点&quo ...
- JavaWeb后端
JavaWeb后端 我们学习JavaWeb的最终目的是为了搭建一个网站,并且让用户能访问我们的网站并在我们的网站上做一些事情. 计算机网络基础 在计算机网络(谢希仁 第七版 第264页)中,是这样描述 ...
- ❀ Spring5学习大总结
一.了解 Spring 基本介绍.主要思想 IoC/DI 1.了解 Spring 基本介绍 (1) Spring是什么? Spring 是一个轻量级的 DI/IoC 和 AOP 容器的开源框架,致力于 ...
- Scrapy(五):Response与Request、数据提取、Selector、Pipeline
学习自Requests and Responses - Scrapy 2.5.0 documentation Request在Spider中生成,被Downloader执行,之后会得到网页的Respo ...
- C# 字符串、数组和List的截取和转换
using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using S ...
- pyqt(二)
二.文本和图片 1. 文本控件 文本控件是QLabel from PyQt5.QtWidgets import QWidget,QApplication,QLabel from PyQt5.QtCor ...
- JAVA String、StringBuilder、和StringBuffer的区别,及如何使用
目录 String类 一.String类的理解和创建对象 二.String类创建的方式 两种创建String对象的区别 测试题 三.String常用方法 四.StringBuffer类 1.Strin ...
- LeetCode-016-最接近的三数之和
最接近的三数之和 题目描述:给定一个包括 n 个整数的数组 nums 和 一个目标值 target.找出 nums 中的三个整数,使得它们的和与 target 最接近.返回这三个数的和.假定每组输入只 ...
- WPF-GridView设置列宽按比例分配
将ListView包裹在一个父Grid中 写一个与ListView平行的Grid,设置该Grid的列数与ListView中GridView的列数相同,将该Grid各列设置列宽按比例分配 将ListVi ...