Spring mvc @initBinder 类型转化器的使用

一.单日期格式

因为是用注解完完成的后台访问,所以必须在大配置中配置包扫描器;

1.applicactionContext.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:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop" 
    xmlns:tx="http://www.springframework.org/schema/tx" 
    xmlns:mvc="http://www.springframework.org/schema/mvc" 
     xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
        ">
     
   <!-- 配置包扫描器-->
       <context:component-scan base-package="cn.happy.controller"></context:component-scan>
</beans>

 2.配置类

package cn.happy.controller;

import java.text.SimpleDateFormat;
import java.util.Date;

import org.springframework.beans.propertyeditors.CustomDateEditor;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.RequestMapping;
     @Controller
    public class FirstController {
         /**
          * @param binder
          */
         
        @InitBinder
        public void initBinder(WebDataBinder binder){
            //PropertyEditor
            //类  implements  PropertyEditor
            binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"), true));
        }
        @RequestMapping("/first.do")
        //类型转化工作一定是在真正的handler方法执行前执行的。
        public String doFirst(Date birthday,int age) throws Exception{
            System.out.println(birthday+"===============");
            System.out.println(age+"===============");
            return "/WELCOME.jsp";
        }
        
        
    }

    

 3.前台

    <form action="${pageContext.request.contextPath }/first.do" method="post">
                 出生日期:<input name="birthday"/><br/><br/>
                 年龄:<input name="age"/><br/><br/>
       <input type="submit" value="注册"/>
    </form>

二:多日期格式

1.因为并不是一种格式,所以我们可以把能进转换的格式提到一个类中

package cn.happy.controller;

import java.sql.Date;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.regex.Pattern;

import org.springframework.beans.TypeMismatchException;
import org.springframework.beans.propertyeditors.PropertiesEditor;

public class MyDateEditor extends PropertiesEditor{
     @Override
    public void setAsText(String source) throws IllegalArgumentException {
    	 
      SimpleDateFormat sdf=getDate(source);
      //做一个操作
      try {
		setValue(sdf.parseObject(source));
	} catch (ParseException e) {
		e.printStackTrace();
	}
    	 
    }

	private SimpleDateFormat getDate(String source) {
		SimpleDateFormat sdf=null;
		if (Pattern.matches("^\d{4}-\d{2}-\d{2}$", source)) {
			sdf=new SimpleDateFormat("yyyy-MM-dd");
		}else if (Pattern.matches("^\d{4}/\d{2}/\d{2}$", source)) {
			sdf=new SimpleDateFormat("yyyy/MM/dd");
		}else if (Pattern.matches("^\d{4}\d{2}\d{2}$", source)) {
			sdf=new SimpleDateFormat("yyyyMMdd");
		}else {
			throw new TypeMismatchException("", Date.class);
		}
		
		return sdf;
	}
     
     
     
     
}

2、还是用@initBinder 注解处理类型

package cn.happy.controller;

import java.beans.PropertyEditor;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.springframework.beans.propertyeditors.CustomDateEditor;
import org.springframework.beans.propertyeditors.PropertiesEditor;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.RequestMapping;
     @Controller
	public class FirstController {
    	 /**
    	  * 
    	  * @param binder
    	  */
    	 @InitBinder
    	public void initBinder(WebDataBinder binder){
    		binder.registerCustomEditor(Date.class,new MyDateEditor());
    		System.out.println("===============11111");
    		
    	}
    	 
		@RequestMapping("/first.do")
		//类型转化工作一定是在真正的handler方法执行前执行的。
		public String doFirst(Date birthday,int age) throws Exception{
			System.out.println(birthday+"===============");
			System.out.println(age+"===============");
			return "/WELCOME.jsp";
		}
		
		
	}

	
原文地址:https://www.cnblogs.com/myhome-1/p/6260018.html