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

时间:2023-03-09 23:51:40
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";
} }