SpringMVC表单或Json中日期字符串与JavaBean的Date类型的转换
SpringMVC表单或Json中日期字符串与JavaBean的Date类型的转换
场景一:表单中的日期字符串和JavaBean的Date类型的转换
在使用SpringMVC的时候,经常会遇到表单中的日期字符串和JavaBean的Date类型的转换, 例如,如下代码S_ROLE_QO这个bean中包含有Date类型属性,不处理就拿不到值。
|
/** * 分页取角色列表 * @param s_ROLE_QO 角色查询条件 * @return */ @RequestMapping(value = "/loadRoles", method = RequestMethod.GET) @ResponseBody public ServerResponse<List<S_ROLE_EO>> loadRoles( S_ROLE_QO s_ROLE_QO) { PageHelper.startPage(s_ROLE_QO.getPageIndex(), s_ROLE_QO.getPageSize()); List<S_ROLE_EO> lst = s_ROLE_DAO.getRolesByConditionWithPaging(s_ROLE_QO); PageInfo<S_ROLE_EO> page = new PageInfo<S_ROLE_EO>(lst); return new ServerResponse<List<S_ROLE_EO>>(1, null, lst, page.getTotal()); } |
而SpringMVC默认不支持这个格式的转换,所以需要手动配置,自定义数据的绑定才能解决这个问题。
WebDataBinder是用来绑定请求参数到指定的属性编辑器.由于前台传到controller里的值是String类型的,当往Model里Set这个值的时候,如果set的这个属性是个对象,Spring就会去找到对应的editor进行转换,然后再SET进去。
代码如下:
|
public static String GREGORIAN_DATEFORMAT= "EEE MMM dd yyyy hh:mm:ss z"; //将表单中特定日期类型的日期字符串转换成Javabean中的日期类型的属性 @InitBinder protected void initBinder(WebDataBinder binder) { SimpleDateFormat dateFormat = new SimpleDateFormat(GREGORIAN_DATEFORMAT, Locale.ENGLISH); binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true)); } |
场景二:Json中的日期字符串和JavaBean的Date类型的转换
还是上面的代码,只不过加了个@RequestBody,采用json格式传参

这个时候处理方式:
往工程中引入以下包,如果是maven工程,在pom文件中加入
|
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.7.3</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.7.3</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.7.3</version> </dependency> |
然后在工具包添加如下工具类:
|
@Component public class JsonDateSerializer extends JsonSerializer<Date> { @Override public void serialize(Date date, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException, JsonProcessingException { jsonGenerator.writeString(DateUtil.format(date)); } } |
|
public class JsonDateDeSerializer extends JsonDeserializer<Date> { @Override public Date deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException { String dataFormat=null; String date = p.getText(); // 判断客户端传过来的是否是UTC类型 if (p.getText().contains("Z")) { dataFormat="yyyy-MM-dd'T'HH:mm:ss.SSS Z"; date=date.replace("Z", " UTC"); } return DateUtil.format(date,dataFormat) ; } } |
|
/** * 日期工具类 * * Date类型转换为日期字符串之间的转换 * */ public class DateUtil { /** * 将Date类型转换为字符串 * * @param date * 日期类型 * @return日期字符串 */ public static String format(Date date) { return format(date, "yyyy-MM-dd HH:mm:ss"); } /** * 将Date类型转换为字符串 * * @param date * 日期类型 * @param pattern * 字符串格式 * @return日期字符串 */ public static String format(Date date, String pattern) { if (date == null) { return "null"; } if (pattern == null || pattern.equals("") || pattern.equals("null")) { pattern = "yyyy-MM-dd HH:mm:ss"; } return new java.text.SimpleDateFormat(pattern).format(date); } /** * 将字符串转换为Date类型 * * @param date * 字符串类型 * @return日期类型 */ public static Date format(String date) { return format(date, null); } /** * 将字符串转换为Date类型 * * @param date * 字符串类型 * @param pattern * 格式 * @return日期类型 */ public static Date format(String date, String pattern) { if (pattern == null || pattern.equals("") || pattern.equals("null")) { pattern = "yyyy-MM-dd HH:mm:ss"; } if (date == null || date.equals("") || date.equals("null")) { return new Date(); } Date d = null; try { SimpleDateFormat sdf = new SimpleDateFormat(pattern); if (pattern.equals("yyyy-MM-dd'T'HH:mm:ss.SSS Z")) { sdf.setTimeZone(TimeZone.getTimeZone("GMT")); } d = sdf.parse(date); } catch (ParseException pe) { } return d; } } |
最后在JavaBean的Date类型属性的get set方法上添加如下注解,注意springMVC的注解驱动<mvc:annotation-driven> 要配置
|
@JsonSerialize(using = JsonDateSerializer.class) public Date getCreateTimeStart() { return createTimeStart; } @JsonDeserialize(using = JsonDateDeSerializer.class) public void setCreateTimeStart(Date createTimeStart) { this.createTimeStart = createTimeStart; } |
SpringMVC表单或Json中日期字符串与JavaBean的Date类型的转换的更多相关文章
- 日期字符串转为java.sql.Date
日期字符串转为java.sql.Date类型 问题引出:在将一个日期字符串通过sql语句,插入到数据表的日期字段(字段类型是DATE),时遇到一个问题,如何将一个日期字符串转成java.sql.Dat ...
- 表单中的日期 字符串和Javabean中的日期类型的属性自动转换
搞了一上午的bug最终还是因为自己springMVC的注解不熟悉的原因,特记录. 在实际操作中经常会碰到表单中的日期 字符串和Javabean中的日期类型的属性自动转换, 而springMVC默认不支 ...
- 表单序列化json字符串和js时间格式化
js时间格式化 new Date().format("时间格式") Date.prototype.format = function(fmt) { var o = { ...
- SpringMVC 表单验证
SpringMVC 表单验证 本章节内容很丰富,主要有基本的表单操作,数据的格式化,数据的校验,以及提示信息的国际化等实用技能. 首先看效果图 项目结构图 接下来用代码重点学习SpringMVC的表单 ...
- ★★★【卡法 常用js库】: js汇合 表单验证 cookie设置 日期格式 电话手机号码 email 整数 小数 金额 检查参数长度
[卡法 常用js库]: js汇合 表单验证 cookie设置 日期格式 电话手机号码 email 整数 小数 金额 检查参数长度 // +---------------------- ...
- js Form表单转json格式,及后台接收(多种方法)
转载:https://blog.csdn.net/qq_40138785/article/details/81533015 一.serialize()方法格式:var data = $("# ...
- (转载)SPRINGMVC表单标签简介
SpringMVC表单标签简介 在使用SpringMVC的时候我们可以使用Spring封装的一系列表单标签,这些标签都可以访问到ModelMap中的内容.下面将对这些标签一一介绍. 在正式介绍Spri ...
- SpringMVC表单标签简介
在使用SpringMVC的时候我们可以使用Spring封装的一系列表单标签,这些标签都可以访问到ModelMap中的内容.下面将对这些标签一一介绍. 在正式介绍SpringMVC的表单标签之前,我们需 ...
- 将forme表单转换为Json对象
//将Form 表单转换为Json字符串 $.fn.serializeObject = function () { var o = {}; var a = this.serializeArray(); ...
随机推荐
- Python语言为什么被称为高级程序设计语言?
Python是一种令人惊叹的编程语言,毫无疑问.从1991年的卑微开始,它现在几乎无处不在.无论您是在进行Web开发,系统管理,测试自动化,devop还是数据科学,Python在您的工作中发挥作用的可 ...
- 数据库的特性与隔离级别和spring事务的传播机制和隔离级别
首先数据库的特性就是 ACID: Atomicity 原子性:所有事务是一个整体,要么全部成功,要么失败 Consistency 一致性:在事务开始和结束前,要保持一致性状态 Isolation 隔离 ...
- linux发版
使用MobaXterm_v8.5 1.upload需要更换的文件 2.关闭Tomcat cd /usr/local/tomcat/apache-tomcat-6.0.30-pcitcaly/ ...
- Mac自带服务器的应用
Mac OS下自带了apache,方便部署一些静态数据(html,css,js,xml,图片等数据) 一.系统默认路径 系统默认是隐藏apache安装目录的,但我们可以通过“命令行”或者“文件夹前往” ...
- leetcode 118. 杨辉三角(python)
给定一个非负整数 numRows,生成杨辉三角的前 numRows 行. 在杨辉三角中,每个数是它左上方和右上方的数的和. 示例: 输入: 5输出:[ [1], [1,1], [1,2,1], [1, ...
- 用 Flask 来写个轻博客 (37) — 在 Github 上为第一阶段的版本打 Tag
Blog 项目源码:https://github.com/JmilkFan/JmilkFan-s-Blog 目录 目录 前文列表 第一阶段结语 打 Tag 前文列表 用 Flask 来写个轻博客 (1 ...
- curl的一些常用命令
在学习nodejs中get到了一项新的技能crul curl 可以给在命令行上面给node服务器发送一些信息,然后得到服务器返回而响应信息,在命令行中打印出来. 下面是我整理的一些常用的命令:
- WebApi系列~基于RESTful标准的Web Api 转载 https://www.cnblogs.com/lori/p/3555737.html
微软的web api是在vs2012上的mvc4项目绑定发行的,它提出的web api是完全基于RESTful标准的,完全不同于之前的(同是SOAP协议的)wcf和webService,它是简单,代码 ...
- 16/8/21_PHP-有关类函数,this,static,面向对象思想介绍
class_exists():判断某个类是否存在(定义过) interface_existe():判断接口是否存在 get_class():获取某个对象的"所属类名" get_pa ...
- HDU 2512 一卡通大冒险 (第二类斯特林数)
题目链接:HDU 2512 Problem Description 因为长期钻研算法, 无暇顾及个人问题,BUAA ACM/ICPC 训练小组的帅哥们大部分都是单身.某天,他们在机房商量一个绝妙的计划 ...