天天看點

Spring MVC 實用 tips

文章目錄

    • 1. 如何制定資料類型轉換器
      • 1. 日期類型的轉換
      • 2. 自定義類型的轉換

1. 如何制定資料類型轉換器

使用 Spring MVC 架構進行 Web 開發時,前端頁面傳輸的資料會自動封裝到業務方法的參數中,這項工作是由 HandlerAdapter 元件完成的。

1. 日期類型的轉換

我們知道 HTTP 表單中的所有請求參數都是 String 類型的,如果業務方法的參數是 String 或者 int 類型,HandlerAdapter 可以自動完成資料轉換,但如果參數是其他資料類型,比如 Date 類型,HandlerAdapter 是無法将 String 類型自動轉為 Date 類型的,此時需要實作 Converter 接口來輔助 Spring MVC 完成資料類型的轉換。

首先,先自定義一個Converter的實作類:

/*
Converter是org.springframework.core.convert.converter.Converter包下的,後面的兩個泛型代表你要将什麼資料類型轉換為什麼資料類型;
*/
public class DateConverter implements Converter<String, Date> {
    String pattern;
    //pattern代表你要轉換的資料是什麼格式的
    public DateConverter(String pattern){
        this.pattern = pattern;
    }
    @Override
    public Date convert(String s) {
        //SimpleDateFormat是Java.text包下的一個日期格式轉換類;
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
        try {
            return simpleDateFormat.parse(s);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }
}
           

此時還需要在Spring的配置檔案中配置如下資訊:

<context:component-scan base-package="com.yy"/>
    <!--後面的conversion-service這個參數是為了給資料定義類型轉換器-->
    <mvc:annotation-driven conversion-service="conversionService"/>

    <!--視圖解析器,将邏輯視圖轉換為實體視圖-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
        <property name="prefix" value="/jsp/"/>
        <property name="suffix" value=".jsp"/>
    </bean>

    <bean id="conversionService" 			       class="org.springframework.context.support.ConversionServiceFactoryBean">
        <property name="converters">
            <list>
                <!-這個list中可以列出你定義的所有類型轉換器->
                <bean class="com.yy.mytest.DateConverter">
                    <!-- 調用有參構造函數建立 bean -->
                    <constructor-arg type="java.lang.String" value="yyyy-MM-dd"/>
                </bean>
            </list>
        </property>
    </bean>
           

我們來測試一下,先在webapp下建立一個form.jsp頁面:

<%@ page import="com.yy.po.User" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core_rt" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<form action="/test">
    日期:<input type="text" name="date">
    <input type="submit"> 送出
</form>
</body>
</html>
           

再建立一個控制類:

@RequestMapping("/test")
    @ResponseBody    //這個注解可以使傳回直接輸出到頁面上,不用傳回jsp頁面
    public String test(Date date) {
        return date.toString();
    }
           

啟動tomcat,輸入http://localhost:808/form.jsp ,頁面呈現如下:

Spring MVC 實用 tips

輸入如下:(注意輸入的格式一定要按照xml配置檔案中的那樣:yyyy-MM-dd)

如果格式不是那樣,就會報500伺服器内部錯誤

Spring MVC 實用 tips

點選送出按鈕:

Spring MVC 實用 tips

2. 自定義類型的轉換

除了 Date 類型的轉換,我們還可以自定義資料格式,比如注冊一個User,前端頁面按照 “id-name-address” 的形式輸入 String 類型的資料,通過自定義 Convertor,可以将該 String 類型的資料直接轉換為 Student 對象;

具體操作第一步還是定義類型轉換的類:

public class DateConverter implements Converter<String, User> {

    @Override
    public User convert(String s) {
        User user = new User();
        String[] splitS = s.split("-");
        user.setUserid(Integer.parseInt(splitS[0]));
        user.setUsername(splitS[1]);
        user.setUseraddr(splitS[2]);
        return user;
    }
}
           

xml中:(其他與上面的配置一樣)

<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
        <property name="converters">
            <list>
                <bean class="com.yy.mytest.UserConverter"></bean>
            </list>
        </property>
    </bean>