SpingMVC类型转换

框架内部做了类型转换工作,将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类型的日期 

 

posted @ 2018-03-31 10:13  风骚少年  阅读(156)  评论(0编辑  收藏  举报
AmazingCounters.com