框架内部做了类型转换工作,将String转换成Int,但是默认类型转换器并不是可以将用户提交的String转换为用户需要的类型,此时就需要自定义类型转换器了
下边我自定义一个日期类型的转换器 才认识能否将前台输入的string在后台转换成date类型 并且输出到控制台
定义一个控制器类 参数和前台jsp页面上的参数进行自动装配
@Controller public class FirstController @RequestMapping("/first") public String doFirst(String username, int age, Date birthday){ System.out.println(username); System.out.println(age); System.out.println(birthday); return "suecssful"; } }
定义一个转换器
//Converter是一个泛型接口 s带原始类型 t代表目标类型 所以这里是String和date
public class TypeDate implements Converter<String,Date> { public Date convert(String str) { SimpleDateFormat sdf = getDate(str); try { return sdf.parse(str); } catch (ParseException e) { e.printStackTrace(); } return null; } public SimpleDateFormat getDate(String str) {
SimpleDateFormat sdf=null;
//通过正则去和前台输入的格式进行匹配 只要符合正则表达式的规则 就可以转换 if(Pattern.matches("^\d{4}-\d{2}-\d{2}$",str)){ sdf=new SimpleDateFormat("yyyy-MM-dd"); } if(Pattern.matches("^\d{4}/\d{2}/\d{2}$",str)){ sdf=new SimpleDateFormat("yyyy/MM/dd"); } if(Pattern.matches("^\d{4}\d{2}\d{2}$",str)){ sdf=new SimpleDateFormat("yyyyMMdd"); } return sdf; } }
xml配置文件的书写
<context:component-scan base-package="day13"></context:component-scan> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/"></property> <property name="suffix" value=".jsp"></property> </bean> <!--定义一个转换器--> <bean id="myDateType" class="day13.TypeDate"></bean> <!--注册一个转换器服务--> <bean id="conversionService2" class="org.springframework.context.support.ConversionServiceFactoryBean"> <property name="converters" ref="myDateType"></property> </bean> <!--注解驱动管理一个转换服务--> <mvc:annotation-driven conversion-service="conversionService2"></mvc:annotation-driven>
前台页面的定置:
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %> <html> <head> <title>Title</title> </head> <body> <form action="/first" method="post"> 姓名:<input name="username" value="${username}"><br> 年龄:<input name="age"><br> 出生日期:<input name="birthday"><br> <input type="submit" value="提交"> </form> </body> </html>
配置完成! 控制台打印date类型的日期