SpringMVC中接收到的数据都是String形式,然后再根据反射机制将String转换成对应的类型。如果此时想接收一个Date类型,那么我们可以定义一个转换器来完成。

例如,我们有下面的Emp类:

package org.lyk.vo;

import java.util.Date;

public class Emp
{
private Integer empno;
private String ename;
private Double sal;
private Date hiredate; public Date getHiredate()
{
return hiredate;
}
public void setHiredate(Date hiredate)
{
this.hiredate = hiredate;
}
public Integer getEmpno()
{
return empno;
}
public void setEmpno(Integer empno)
{
this.empno = empno;
}
public String getEname()
{
return ename;
}
public void setEname(String ename)
{
this.ename = ename;
}
public Double getSal()
{
return sal;
}
public void setSal(Double sal)
{
this.sal = sal;
} @Override
public String toString()
{
return "Emp [empno=" + empno + ", ename=" + ename + ", sal=" + sal + ", hiredate=" + hiredate + "]";
} }

其中hiredate是日期类型。

下面是前端页面代码:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://" + request.getServerName() + ":"
+ request.getServerPort() + path + "/";
%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>"> <title>My JSP 'insert.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
--> </head> <body>
<form action="pages/emp/echo.action" method="post">
员工编号:<input name="empno" value="192"><br>
姓名:<input name="ename" value="刘远奎"><br>
薪水:<input name="sal" value="66.9"><br>
雇佣日期:<input name="hiredate" value="2015-10-12"/>
<input type="submit" value="提交">
</form>
</body>
</html>

下面是Spring的Action代码:

package org.lyk.servlet;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import org.lyk.vo.Dept;
import org.lyk.vo.Emp;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView; @Controller
@RequestMapping("/pages/emp/*")
public class EmpServlet
{
@RequestMapping
public ModelAndView echo(Emp emp,HttpServletRequest request,HttpServletResponse response)
{
System.out.println(request.getSession().getId());
request.getServletContext(); ModelAndView mav = new ModelAndView("/pages/emp/show.jsp");
System.out.println("*********Emp:" + emp);
mav.addObject("msg", emp.toString());
return mav;
}
}

上面的代码可以在设置Emp的empno、ename、sal的时候都没有问题,但是通过后台输出发现hiredate的值为null。如果想要SpringMVC给我们做转换,则主要专门写一个String到Date的转换代码。

package org.lyk.convertor;
//org.lyk.convertor.StringToDateConvertor
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date; import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.convert.converter.Converter; public class StringToDateConvertor implements Converter<String,Date>
{
private static final Logger logger = LoggerFactory.getLogger(StringToDateConvertor.class);
@Override
public Date convert(String dateInString)
{
logger.info("dateInString:" + dateInString);
SimpleDateFormat sdf = null;
if(dateInString != null && !"".equals(dateInString))
{
if(dateInString.matches("\\d{4}-\\d{2}-\\d{2}"))
{
sdf = new SimpleDateFormat("yyyy-MM-dd");
}else if(dateInString.matches("\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}"))
{
sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
}else if(dateInString.matches("\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}\\.\\d{3}"))
{
sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
}
else
{
logger.info("传入的日期参数格式有误!!!");
return null;
}
} logger.info("sdf:" + sdf); try
{
return sdf.parse(dateInString);
} catch (ParseException e)
{
e.printStackTrace();
return null;
} } }

然后配置上Sping的applicationContext.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.1.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd"> <context:annotation-config/>
<context:component-scan base-package="org.lyk"/> <!-- 第三步: 将conversionService配置到SpringMVC中 -->
<mvc:annotation-driven conversion-service="conversionService"/>
<mvc:default-servlet-handler/> <!-- 第一步: 给Spring容器注入String到Date的转换器 -->
<bean name="dateConvert" class="org.lyk.convertor.StringToDateConvertor"/> <!-- 第二部: 将该转换器注入到conversionService里 -->
<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<property name="converters">
<set>
<ref bean="dateConvert"/>
</set>
</property>
</bean>
</beans>

运行程序,后台输出结果.

SpringMVC中数据转换的更多相关文章

  1. SpringMVC的数据转换,格式化和数据校验

          在SpringMVC中,根据请求方法签名不同,将请求消息中的消息以一定的方式转换并绑定到请求方法的参数中,在请求信息到达真正调用处理方法的这一段时间内,SpringMVC还会完成很多其他的 ...

  2. SpringMVC 之数据转换和国际化

    1. 数据绑定流程 SpringMVC 主框架将 ServletRequest 对象及目标方法的入参实例传递给 WebDataBinderFactory 实例,以创建 DataBinder 实例对象; ...

  3. Springmvc中ajax与jason应用

    Springmvc中ajax与jason应用 相关依赖包 json数据转换的jar包 jackson-annotations-2.5.4 jackson-core-2.5.4 jackson-data ...

  4. SpringMVC的数据转换&&数据格式化&&数据校验

    1 SpringMVC的数据绑定流程 SpringMVC将ServletRequest对象及目标方法的入参实例传递给WebDataBinderFactory实例,以创建DataBinder实例对象. ...

  5. SpringMvc中的数据校验

    SpringMvc中的数据校验 Hibernate校验框架中提供了很多注解的校验,如下: 注解 运行时检查 @AssertFalse 被注解的元素必须为false @AssertTrue 被注解的元素 ...

  6. 【Spring】SpringMVC中浅析Date类型数据的传递

    在控制器中加入如下代码: @InitBinder public void initBinder(ServletRequestDataBinder bin){ SimpleDateFormat sdf ...

  7. 详解SpringMVC中GET请求

    GET请求概述 GET请求,请求的数据会附加在URL之后,以?分割URL和传输数据,多个参数用&连接.URL的编码格式采用的是ASCII编码,而不是uniclde,所有的非ASCII字符都要编 ...

  8. SpringMVC中使用Interceptor拦截器

    SpringMVC 中的Interceptor 拦截器也是相当重要和相当有用的,它的主要作用是拦截用户的请求并进行相应的处理.比如通过它来进行权限验证,或者是来判断用户是否登陆,或者是像12306 那 ...

  9. 如何在springMVC 中对REST服务使用mockmvc 做测试

    如何在springMVC 中对REST服务使用mockmvc 做测试 博客分类: java 基础 springMVCmockMVC单元测试  spring 集成测试中对mock 的集成实在是太棒了!但 ...

随机推荐

  1. 基于VMware Workstation搭建开发服务器

    基于VMware Workstation搭建开发服务器   文章为本人原创,转载请联系作者并注明出处.晓松 源URL: https://www.jianshu.com/p/e62ab7de0124 我 ...

  2. sharepoint 2013 office web app 2013 文档在线浏览 IE11 浏览器不兼容解决方法

    昨晚配置完成office web apps 2013的外部网络访问之后,今天发现了一个很奇怪的问题,就是IE 11不支持文档在线浏览,找了很多方法,打补丁什么的,都不管用,最后在预览文件的页面,看到& ...

  3. pageadmin CMS网站制作教程:

    pageadmin CMS网站建设教程:模板中如何实现信息数据共享 很多时候信息数据需要共享,一个最常用的应用场景就是手机版(独立手机,非响应式)本共享pc版本数据,下面以这个场景为例讲解. 假设手机 ...

  4. Day 36 网络编程-计算机的发展

    手工操作 —— 穿孔卡片 批处理 —— 磁带存储和批处理系统 多道程序系统 分时系统 实时系统 通用操作系统 操作系统的进一步发展 操作系统的作用 手工操作 —— 穿孔卡片 1946年第一台计算机诞生 ...

  5. LiLicense server OR Activation code

    JET BRAINS系列工具下载地址: https://www.jetbrains.com/products.html?fromMenu License server 输入下列两个任何一个点击 Act ...

  6. docker registry 私有仓库 安装配置、查询、删除

    #++++++++++++++++++++++++++++++ #docker-registry 私有仓库 #搜索,下载register镜像 docker search registry docker ...

  7. django 获取request请求对象及response响应对象中的各种属性值

    django request对象和HttpResponse对象 HttpRequest对象(除非特殊说明,所有属性都是只读,session属性是个例外) HttpRequest.scheme 请求方案 ...

  8. Js验证15/18身份证

    var vcity={ 11:"北京",12:"天津",13:"河北",14:"山西",15:"内蒙古&quo ...

  9. C#里面获取web和非web项目路径

    非Web程序获取路径几种方法如下: 1.AppDomain.CurrentDomain.BaseDirectory  2.Environment.CurrentDirectory 3.HttpRunt ...

  10. Redis初探,写个HelloWorld

    资源获取 https://redis.io/download 从官网上下载redis的源码,使用gcc的安装方式. 安装 make make install 需要达到的效果是,在/usr/local/ ...