SpringMVC Date数据类型绑定

数据绑定应该算是spring MVC的特点之一吧~简单易用且功能强大,极大地简化了我们编程人员对于用户输入数据的接收及转换。

早先版本的Spring中的数据绑定完全都是基于PropertyEditor的。而Spring3中引入了Converter,用来替代PropertyEditor完成类型转换。

那么我们也依照这个顺序,先来讲讲基于传统的PropertyEditor来实现日期类型的数据绑定。

在Spring MVC中,我们可以通过WebDataBinder来注册自定义的PropertyEditor,从而添加对应的请求参数绑定。有两种方式:

1、使用@InitBinder注解@Controller中的方法 2、自定义WebBindingInitializer来提供一个全局的数据绑定规则。

1、使用@InitBinder注解

@InitBinder
public void initBinder(WebDataBinder binder){
    binder.registerCustomEditor(Date.class, new DateEditor());
}  
public class DateEditor extends PropertyEditorSupport {
    @Override
    public void setAsText(String text) throws IllegalArgumentException {
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date date = null;
        try {
            date = format.parse(text);
        } catch (ParseException e) {
            format = new SimpleDateFormat("yyyy-MM-dd");
            try {
                date = format.parse(text);
            } catch (ParseException e1) {
                e1.printStackTrace();
            }
        }
        setValue(date);
    }
}  

这里我们将DateEditor提出来封装成一个类方便重用。

另外这里有个try...catch的小妙用,就是首先以"yyyy-MM-dd HH:mm:ss"的形式来解析用户输入的参数,若解析失败则转以"yyyy-MM-dd"的形式来解析。这样的逻辑就可以同时处理"yyyy-MM-dd HH:mm:ss"和"yyyy-MM-dd"形式的日期数据,我想在一般的中文系统中,这两种形式应该是最常用的了吧。

添加如上代码之后,@InitBinder所在的Controller就可以自动绑定日期类型的数据了,不过这仅仅是在该Controller中生效,若想在全局范围内生效的话,可以将@InitBinder注解所在的Controller定义为一个BaseController,其余Controller都继承这个Controller。当然还有另外的方法,若你有兴趣的话,请看2。

2、自定义WebBindingInitializer

public class MyWebBindingInitializer implements WebBindingInitializer {  

    @Override
    public void initBinder(WebDataBinder binder, WebRequest request) {
        binder.registerCustomEditor(Date.class, new DateEditor());
    }
}  

还是前面写的DateEditor,这么快又见面了,只不过注册的位置改变了,在WebBindingInitializer中注册的PropertyEditor是在全局范围内共享的。

不过光这样还不够,还要将WebBindingInitializer注入到AnnotationMethodHandlerAdapter中。

    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
        <property name="webBindingInitializer">
            <bean class="com.**.**.**.MyWebBindingInitializer" />
        </property>
    </bean>
    

完美解决问题提

测试代码

@Controller
@RequestMapping(value="/")
public class BaseController {

    @RequestMapping(value="index")
    public String indexJsp(String username,Date date,Date ddate){
        System.out.println(username);
        System.out.println(date);
        System.out.println(ddate);
        return "index";
    }
}

测试参数

index?username=fasdf&date=2012-12-03&ddate=2013-03-06

输出结果:

fasdf
Mon Dec 03 00:00:00 CST 2012
Wed Mar 06 00:00:00 CST 2013

参考文档:http://blog.csdn.net/u012345283/article/details/43268081

时间: 2024-08-24 03:39:38

SpringMVC Date数据类型绑定的相关文章

SpringMVC学习(五)——SpringMVC的参数绑定

SpringMVC中的参数绑定还是蛮重要的,所以单独开一篇文章来讲解.本文所有案例代码的编写均建立在前文SpringMVC学习(四)——Spring.MyBatis和SpringMVC的整合的案例基础之上,因此希望读者能仔细阅读这篇文章. 默认支持的数据类型 现在有这样一个需求:打开商品编辑页面,展示商品信息.这是我对这个需求的分析:编辑商品信息,需要根据商品id查询商品信息,然后展示到页面.我这里假设请求的url为/itemEdit.action,由于我想要根据商品id查询商品信息,所以需要传

SpringMVC基本参数绑定(7种)

SpringMVC基本参数绑定(7种) 1.默认参数支持 HttpServletRequest HttpServletResponse HttpSession 示例: @RequestMapping("edit.action") public ModelAndView editShop(HttpServletRequest request){ ? String name= request.getParameter("id"); } 2.绑定基本类型(int,stri

springmvc(2)--参数绑定

一.以实例来看springmvc各种参数绑定方式 先定义个dto类: public class RestInDto implements Serializable { private static final long serialVersionUID = -5461373449802431627L; private String userName; private BigDecimal salary; private boolean isVip; private int id; ......

springmvc 的参数绑定

1.springmvc的参数绑定的过程 从客户端请求key/value数据,经过参数绑定,将key/value数据绑定到controller方法的形参上. springmvc中,接收页面提交的数据是通过方法形参来接收.而不是在controller类定义成员变更接收!!!!(单例的哦) 直接在controller方法形参上定义下边类型的对象,就可以使用这些对象.在参数绑定过程中,如果遇到下边类型直接进行绑定. 1)HttpServletRequest:通过request对象获取请求信息 2)Htt

SpringMVC中用于绑定请求数据的注解以及配置视图解析器

SpringMVC中用于绑定请求数据的注解 在上一篇文章中我们简单介绍了@RequestMapping与@RequestParam注解,知道了如何去配置地址映射,本篇则介绍一些用于处理request数据的注解. [email protected]注解,该注解用于处理request中的header部分,也就是http请求头的部分,它可以把header部分的值绑定到方法的参数上,示例: package org.zero01.test; import org.springframework.stere

Timestamp 与 Date 变量绑定与Oracle的自动分区

好久没有更新博客了,其实是工作中遇到的很多问题在Google上都能找到答案,也就没有记录下来的必要了.今天主要想聊一下在实际的系统中遇到的Oracle数据库的问题,希望对大家有一点点帮助就好. 我首先描述一下我所遇到的场景:我们的数据库用的是Oracle 11g,我想大家立马就对它的自动分区(Interval)有了基本的认识了,这是一个非常棒的功能,免除了在建表时弄一大堆建Range分区的代码,也免除了以后对数据库进行分区扩充的麻烦.当然利用JOB也是可以完成分区扩展的,但是既然Oracle提供

SpringMVC学习(六)——SpringMVC高级参数绑定与@RequestMapping注解

高级参数绑定 现在进入SpringMVC高级参数绑定的学习,本文所有案例代码的编写均建立在前文SpringMVC学习(五)——SpringMVC的参数绑定的案例基础之上,因此希望读者能仔细阅读这篇文章. 绑定数组 现有这样一个需求:在商品列表页面选中多个商品,然后删除之.下面是我对该需求的分析:此功能要求商品列表页面中的每个商品前有一个checkbook(复选框),选中多个商品后点击删除按钮把商品id传递给Controller,根据商品id批量删除商品信息. 首先将itemList.jsp页面改

Long和Date数据类型之间相互转换代码

static final SimpleDateFormat DATETIME_SEC_STR = new SimpleDateFormat("yyyyMMddHHmmss"); 1.Date转Long Long currStartTime = Long.valueOf(DATETIME_SEC_STR.format(new Date())); System.err.println("LONG1: " + currStartTime); 2.Long转Date Dat

springmvc 参数解析绑定原理

handlerMethodArgumentResolver:方法参数解析器接口,这个接口是springmvc参数解析绑定的核心接口.不同的参数类型绑定都是通过实行这个接口来实现.也可以通过实现这个接口来自定义参数解析器.这个接口有如下两个方法: public interface HandlerMethodArgumentResolver{ //该解析器是否支持parameter参数的解析 boolean supportsParameter (MethodParameter parameter);