springMVC入門-2.數據格式轉換

1.springMVC的參數綁定:

把從客戶端獲取的參數數據綁定到controller方法的形參上.

2. Spring的數據綁定過程:

SpringMVC所有的參數封裝(ServletRequest)到WebDataBinder組件中,ConversionService組件進行數據的轉換和格式化,數據驗證(validator) ,springMVC的類型轉換來說,我們所需要的大部分的數據類型轉換(基本類型的數據轉換)他已經給實現了可以詳見ConversionService這個接口

2.5版本之前支持 String ---Date的自動轉換
3.0 + 需要 顯示的進行數據類型轉換器的定義
Spring類型對於Date類型的轉換有兩種方式
    1) 實現Converter接口實現String-date
    2)  需要在目標類的屬性上添加@dateTimeFormat註解即可

3. SpringMVC的自定義數據轉換類型的步驟

1)實現Converter接口

@Component
public class DateConverter implements Converter<String, Date> {
    @Override
    public Date convert(String string) {

        Long l=Long.parseLong(string);
        if(l!=null){
            Date date=new Date(l);
            return date;
        }
        return null;
    }
}

2)需要組件掃描器進行對類型轉換組件的掃描

mvc:annotation-driven

3)配置類型轉換器組件,將自定義的類型轉換器納入到conversionService組件中

<!-- 組件掃描器 -->
<mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>
    <bean id="conversionService"
        class="org.springframework.context.support.ConversionServiceFactoryBean">
        <property name="converters">
            <set>
                <ref bean="dateConverter" />
            </set>
        </property>
</bean>
  1. SpringMVC的Converter formatter接口
    Converter是萬能的(後臺)把任何的源類型轉換爲目標類型 Formatter主要用於頁面的轉換(前臺)而且源類型必須是String類型的
<!-- 組件掃描器 -->
<mvc:annotation-driven conversion-service="conversionService">
</mvc:annotation-driven>
<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean"> 
        <property name="converters">
            <set>
                <ref bean="dateConverter"/>
            </set>
        </property>
</bean>

5 SpringMVC的數據模塊進行輸出數據時,如果使用的是ModelAndView,那麼model中的數據會放到request作用域中。

6 SpringMVC處理輸入模型的第二種方式是在目標方法的入參處使用map類型結合接受數據,默認下會放置到request作用域中
注意存放的不是map,而是所有的鍵值對

7 SpringMVC同樣支持redirect和forward ,需要使用關鍵字:的方式調用,而且必須是在返回值爲String類型情況下使用。

8 SpringMVC使用View接口進行自定義視圖的定義,可以使用getContextType來設定將要放回的視圖的類型

<bean  class="org.springframework.web.servlet.view.BeanNameViewResolver">
       <property name="order"  value="100"></property>
</bean>
@Component
public class TestView implements View {
    @Override
    public String getContentType() {
        return "image/jpeg";
    }
    @Override
    public void render(Map<String, ?> arg0, HttpServletRequest request,
            HttpServletResponse response) throws Exception {

            ServletContext context=request.getServletContext();
            InputStream input=context.getResourceAsStream("/img/test.jpg");
            ServletOutputStream out=response.getOutputStream();
            System.out.println(input);
            int i=0;
            while(-1!=(i=input.read())){
                out.write(i);
            }
            out.close();
            input.close();
    }
}

    @RequestMapping("/getImg")
    public String getImg(){
        return "testView";
    }
發佈了26 篇原創文章 · 獲贊 4 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章