Spring MVC 之类型转换(五)

虽然SpringMVC可以自动绑定多种数据类型,但是有时候有些特殊的数据类型还是会在绑定时发生错误,需要我们自己书写类型转换完成绑定。

SpringMVC中提供两种绑定方式:以时间转换为例

1、属性编辑器(传统方式)

控制器:

 1 @RequestMapping(value="/login.do")
 2     public String login(UserBean user){
 3         log.info(user.getUsername());
 4         log.info(user.getBirthday());
 5         return "index";
 6     }
 7  // 自定义一个属性编辑器,用于转换时间类型
 8 @InitBinder
 9     public void converterStringDate(WebDataBinder  binder){
10         binder.registerCustomEditor(Date.class, new DateEditor());
11     } 

可以通过重写PropertyEditorSupport中的setAsText()定义自己的转换规则

 1 package com.cy.springannotation.controller;
 2
 3 import java.beans.PropertyEditorSupport;
 4 import java.text.ParseException;
 5 import java.text.SimpleDateFormat;
 6 import java.util.Date;
 7
 8 public class DateEditor extends PropertyEditorSupport {
 9
10     @Override
11     public void setAsText(String text) throws IllegalArgumentException {
12                 Date date = null;
13                 try {
14                     if(text.contains("-")){
15                         SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
16                         date = sf.parse(text);
17                     }else {
18                         SimpleDateFormat sf = new SimpleDateFormat("dd/MM/yyyy");
19                         date = sf.parse(text);
20                     }
21                 } catch (ParseException e) {
22                     e.printStackTrace();
23                 }
24                 this.setValue(date);
25     }
26
27 }

2、类型转换器

Converter是Spring3提供的新的类型转换,相对于属性转换器更强大,可以把任意类型转换,而不是局限于String类型。

控制器:

1 @RequestMapping(value="/login.do")
2     public String login(UserBean user){
3         log.info(user.getUsername());
4         log.info(user.getBirthday());
5         return "index";
6     }
7      
全局类型转换器
 1 package com.cy.springannotation.controller;
 2
 3 import java.text.ParseException;
 4 import java.text.SimpleDateFormat;
 5 import java.util.Date;
 6
 7 import org.springframework.core.convert.converter.Converter;
 8 /**
 9  * 全局类型转换器
10  * @author acer
11  *
12  */
13 public class DateConvert  implements Converter<String, Date>{
14     @Override
15     public Date convert(String text) {
16         Date date = null;
17         try {
18             if(text.contains("-")){
19                 SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
20                 date = sf.parse(text);
21             }else {
22                 SimpleDateFormat sf = new SimpleDateFormat("dd/MM/yyyy");
23                 date = sf.parse(text);
24             }
25
26         } catch (ParseException e) {
27             e.printStackTrace();
28         }
29         return date;
30     }
31
32 }

类型转换器需要在配置文件中配置:

 1 <!--开启注解  -->
 2 <mvc:annotation-driven conversion-service="tc" />
 3
 4 <!--类型转换器工厂  -->
 5
 6 <bean id="tc" class="org.springframework.context.support.ConversionServiceFactoryBean">
 7     <property name="converters">
 8         <list>
 9             <bean class="com.cy.springannotation.controller.DateConvert" />
10         </list>
11     </property>
12 </bean>

共同的jsp页面:

 1 <%@ page language="java" import="java.util.*" pageEncoding="utf-8" contentType="text/html; charset=utf-8"%>
 2 <%
 3 String path = request.getContextPath();
 4 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
 5 %>
 6
 7 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 8 <html>
 9   <head>
10     <base href="<%=basePath%>">
11     <title>登录页面</title>
12    <script type="text/javascript" src="<%=basePath%>js/jquery-2.1.4.js"></script>
13    <script type="text/javascript">
14
15
16    </script>
17   </head>
18   <body>
19   <form action="login.do" method="post">
20     <table>
21        <tr>
22            <td>用户名:</td>
23            <td><input type="text" name="username"/></td>
24        </tr>
25        <tr>
26            <td>出生日期</td>
27            <td><input type="text" name="birthday"/></td>
28        </tr>
29        <tr>
30            <td colspan="2"> <input type="submit" value="提交"/> </td>
31        </tr>
32     </table>
33   </form>
34   </body>
35 </html>

结果显示:

时间: 2024-08-11 09:47:46

Spring MVC 之类型转换(五)的相关文章

2017.3.31 spring mvc教程(五)Action的单元测试

学习的博客:http://elf8848.iteye.com/blog/875830/ 我项目中所用的版本:4.2.0.博客的时间比较早,11年的,学习的是Spring3 MVC.不知道版本上有没有变化比较大的功能. spring mvc教程(五)Action的单元测试 这里的博客,还不支持@ContextConfiguration的注解式context file注入.所以内容就不写了. 等找到最新的单元测试方式,再来总结.

spring mvc 参数类型转换

实现方式以字符串转Date为例说明: 全局配置 第一种:实现 Converter 接口 实现类: public class StringToDateConveter implements Converter { private String formatPatten; public StringToDateConveter(String formatPatten){ this.formatPatten=formatPatten; } @Override public Date convert(S

[转]Spring MVC 教程,快速入门,深入分析

.前言二.spring mvc 核心类与接口三.spring mvc 核心流程图 四.spring mvc DispatcherServlet说明 五.spring mvc 父子上下文的说明 六.springMVC-mvc.xml 配置文件片段讲解 七.spring mvc 如何访问到静态的文件,如jpg,js,css 八.spring mvc 请求如何映射到具体的Action中的方法 九. spring mvc 中的拦截器:十. spring mvc 如何使用拦截器 十一. spring mv

Spring MVC 教程,快速入门,深入分析

资源下载: Spring_MVC_教程_快速入门_深入分析V1.1.pdf SpringMVC核心配置文件示例.rar 作者:赵磊 博客:http://elf8848.iteye.com 目录  一.前言二.spring mvc 核心类与接口三.spring mvc 核心流程图 四.spring mvc DispatcherServlet说明 五.spring mvc 父子上下文的说明 六.springMVC-mvc.xml 配置文件片段讲解 七.spring mvc 如何访问到静态的文件,如j

Spring MVC 教程

目录  一.前言二.spring mvc 核心类与接口三.spring mvc 核心流程图 四.spring mvc DispatcherServlet说明 五.spring mvc 父子上下文的说明 六.springMVC-mvc.xml 配置文件片段讲解 七.spring mvc 如何访问到静态的文件,如jpg,js,css 八.spring mvc 请求如何映射到具体的Action中的方法 九. spring mvc 中的拦截器:十. spring mvc 如何使用拦截器 十一. spri

深入理解Spring MVC 思想

原文:http://www.cnblogs.com/baiduligang/p/4247164.html 深入理解Spring MVC 思想 目录  一.前言二.spring mvc 核心类与接口三.spring mvc 核心流程图 四.spring mvc DispatcherServlet说明 五.spring mvc 父子上下文的说明 六.springMVC-mvc.xml 配置文件片段讲解 七.spring mvc 如何访问到静态的文件,如jpg,js,css 八.spring mvc 

spring mvc入门教程(快速入门,深入分析)

目录 一.前言 二.spring mvc 核心类与接口 三.spring mvc 核心流程图 四.spring mvc DispatcherServlet说明 五.spring mvc 父子上下文的说明 六.springMVC-mvc.xml 配置文件片段讲解 七.spring mvc 如何访问到静态的文件,如jpg,js,css 八.spring mvc 请求如何映射到具体的Action中的方法 九.spring mvc 中的拦截器: 十.spring mvc 如何使用拦截器 十一.sprin

Spring MVC JSON自定义类型转换(续)

前面提到了两种转换类型的方法(Spring MVC JSON自定义类型转换),这里针对Json转换提供一种更简便的方法. 通过配置全局的日期转换来避免使用麻烦的注解. 首先用到了一个简单的日期工具类DateUtil.java /** * DateUtil类 * * @author liuzh */ public class DateUtil { public static final String Y_M_D = "yyyy-MM-dd"; public static final St

Spring MVC JSON 实现JsonSerializer Date类型转换

转载至:http://blog.csdn.net/lantianzhange/article/details/40920933 在Spring MVC中存在两大类的类型转换,一类是Json,一个是Spring的Binder转换. JSON: 使用Json转换时,可以如下使用: [java] view plaincopyprint? public class Test { private Date createdate; @JsonSerialize(using = DateYMDHMSJsonS