类型转化器,需要在jsp上捕获到要转化的数据,然后交给控制器的参数,参数为要转化的格式
JSP
<form action="${pageContext.request.contextPath }/date/converter.do" method="post">
${exmsg}</br>
<input type="text" name="birthday" value="${birthday}"/>
<input type="submit" value="提交生日"/>
</form>
控制器
@RequestMapping("/data.do")
public String doData(Date birthday){//Date birthday的Date使我们从jsp页面上对birthday获取到的值所要转化的格式
System.out.println(birthday);
return "/welcome";
}
@ExceptionHandler(TypeMismatchException.class)//控制器抛出来的异常会被这个方法捕获,并且执行
public ModelAndView excepetion(HttpServletRequest request,Exception ex){
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("ex",ex);
String birthday = request.getParameter("birthday");
modelAndView.addObject("birthday",birthday);
modelAndView.setViewName("/controller");
return modelAndView;
}
转化器
需要实现Converter<参数1,参数2>接口,参数1是我们获取的对象的值类型,参数2是我们要讲对象值转化为的类型
例如该例子的Date转化器
public class DateConverter implements Converter<String, Date>{
@Override
public Date convert(String arg0) {
// TODO Auto-generated method stub
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-mm-dd");
if(arg0 != null&&!"".equals(arg0)){
try {
return simpleDateFormat.parse(arg0);
} catch (ParseException e) {
// TODO Auto-generated catch block
throw new TypeMismatchException(arg0, Date.class);//arg0要匹配的值,Date.class要匹配的类型
}
}else{
throw new TypeMismatchException(arg0, Date.class);
}
}
}
springmvc.xml配置
<context:component-scan base-package="com.control"></context:component-scan>
<!-- 注册处理器 -->
<bean id="/my.do" class="com.control.MyController"></bean>
<bean id="baidu" class="org.springframework.web.servlet.view.RedirectView">
<property name="url" value="http://www.baidu.com"></property>
</bean>
<!-- 视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- <property name="prefix" value="/WEB-INF/"></property> -->
<property name="suffix" value=".jsp"></property>
</bean>
<!-- 注册转化器 -->
<bean id="mycontroller" class="com.converter.MyConverter"/>
<bean id="dateConverter" class="com.converter.DateConverter"/>
<!-- 注册转化器工厂 -->
<bean id="controllerService" class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters" ref="dateConverter"></property>
</bean>
<!--启动转化器 -->
<mvc:annotation-driven conversion-service="controllerService"/>