SpringMVC中数据转换
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中数据转换的更多相关文章
- SpringMVC的数据转换,格式化和数据校验
在SpringMVC中,根据请求方法签名不同,将请求消息中的消息以一定的方式转换并绑定到请求方法的参数中,在请求信息到达真正调用处理方法的这一段时间内,SpringMVC还会完成很多其他的 ...
- SpringMVC 之数据转换和国际化
1. 数据绑定流程 SpringMVC 主框架将 ServletRequest 对象及目标方法的入参实例传递给 WebDataBinderFactory 实例,以创建 DataBinder 实例对象; ...
- Springmvc中ajax与jason应用
Springmvc中ajax与jason应用 相关依赖包 json数据转换的jar包 jackson-annotations-2.5.4 jackson-core-2.5.4 jackson-data ...
- SpringMVC的数据转换&&数据格式化&&数据校验
1 SpringMVC的数据绑定流程 SpringMVC将ServletRequest对象及目标方法的入参实例传递给WebDataBinderFactory实例,以创建DataBinder实例对象. ...
- SpringMvc中的数据校验
SpringMvc中的数据校验 Hibernate校验框架中提供了很多注解的校验,如下: 注解 运行时检查 @AssertFalse 被注解的元素必须为false @AssertTrue 被注解的元素 ...
- 【Spring】SpringMVC中浅析Date类型数据的传递
在控制器中加入如下代码: @InitBinder public void initBinder(ServletRequestDataBinder bin){ SimpleDateFormat sdf ...
- 详解SpringMVC中GET请求
GET请求概述 GET请求,请求的数据会附加在URL之后,以?分割URL和传输数据,多个参数用&连接.URL的编码格式采用的是ASCII编码,而不是uniclde,所有的非ASCII字符都要编 ...
- SpringMVC中使用Interceptor拦截器
SpringMVC 中的Interceptor 拦截器也是相当重要和相当有用的,它的主要作用是拦截用户的请求并进行相应的处理.比如通过它来进行权限验证,或者是来判断用户是否登陆,或者是像12306 那 ...
- 如何在springMVC 中对REST服务使用mockmvc 做测试
如何在springMVC 中对REST服务使用mockmvc 做测试 博客分类: java 基础 springMVCmockMVC单元测试 spring 集成测试中对mock 的集成实在是太棒了!但 ...
随机推荐
- SFML从入门到放弃(3) 视角和碰撞检测
SFML从入门到放弃(3) 视角和碰撞检测 视角 window.draw();所画出的对象是在世界坐标的绝对位置. 视角可以选定在窗口中显示世界坐标下的的哪一个区域. sf::View init_vi ...
- django url 路由设置技巧
Django的url使用方法 利用Django开发站点.能够设计出很优美的url规则,假设url的匹配规则(包括正則表達式)组织得比較好,view的结构就会比較清晰.比較easy维护. 最简单的形式 ...
- 访问www.baidu.com后会发生什么(一次完整的网络通讯过程)
1.在浏览器中输入www.baidu.com 这意味着浏览器要向百度发送一个网页数据包,要发送数据包,需要知道对方的IP地址,这里我们只知道网址为www.baidu.com,却不知道IP地址,此时应用 ...
- Storm集群参数调整
Supervisor 参数调整 修改${STORM_HOME}conf/storm.yaml文件内容 supervisor变更参数 slots 配置: 若storm host仅仅执行superviso ...
- C语言的组成 以及预编译
这么多年过去了,回头再来学习一下C语言,发现很多不一样的感觉 #include <stdio.h> int main(int argc, const char * argv[]) { pr ...
- OS之进程管理---实时CPU调度
引言 一般来说,我们将实时操作系统区分为软实时系统(soft real-time system)和硬实时系统(hard real-time system).软实时系统不保证会调度关键实时进程,而只保证 ...
- easyui 中iframe嵌套页面,提示弹窗遮罩的解决方法,parent.$.messager.alert和parent.$.messager.confirm
项目中用到easyui 布局,用到north,west,center三个区域,且在center中间区域嵌入iframe标签.在主内容区做一些小提示弹窗(例如删除前的弹窗提示确认)时,会遇到遮罩问题,由 ...
- 监督学习——决策树理论与实践(上):分类决策树
1. 介绍 决策树是一种依托决策而建立起来的一种树.在机器学习中,决策树是一种预测模型,代表的是一种对象属性与对象值之间的一种映射关系,每一个节点代表某个对象/分类,树中的每一个分叉路 ...
- Linux驱动:LCD驱动测试
(1) 进入内核源码目录中,make menuconfig -> Device Drivers -> Graphics support -> [M]Support for frame ...
- 使用canvas绘制渐变色矩形和使用按键控制人物移动
使用canvas绘制渐变色矩形和使用按键控制人物移动 1.使用canvas绘制渐变色矩形 效果演示 相关代码: <!DOCTYPE html> <html lang="en ...