天天看點

SpringMVC全局亂碼過濾器、注解@RequestParam、自定義類型轉換器

目錄

配置全局亂碼過濾器

參數綁定注解@RequestParam

注解@RequestParam的參數使用說明

獲得Restful風格的參數

自定義類型轉換器

自定義轉換器的開發步驟:

 獲得Servlet相關API

配置全局亂碼過濾器

請求資料的亂碼問題

當postt請求時,資料會出現亂碼,我們可以設定一個過濾器來進行編碼的過濾。

在web.xml中配置過濾器即可

<!--配置過濾的filter-->
<filter>
<!--起個名字    -->
    <filter-name>CharacterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<!-- 将字元集設定utf-8   -->
    <param-name>encoding</param-name>
    <param-value>UTF-8</param-value>
</init-param>
</filter>
    <filter-mapping>
        <filter-name>CharacterEncodingFilter</filter-name>
        <!--所有檔案都進行過濾掃描        -->
        <url-pattern>/*</url-pattern>
    </filter-mapping>
           

參數綁定注解@RequestParam

當請求的參數名稱與Controller的業務方法參數名稱不一緻是,就需要通過@RequestParam注解顯式的綁定
SpringMVC全局亂碼過濾器、注解@RequestParam、自定義類型轉換器

業務方法中的參數為username,請求的參數為name,兩者不一緻,是以需要進行綁定,使用@RequestParam(value="name")進行

注解@RequestParam的參數使用說明

value:與請求參數名稱

required:指在指定的請求參數是否必須包括,預設是true,預設值下送出時如果沒有此參數則報錯

defaultValue:放沒有指定參數時,則使用的預設值指派

獲得Restful風格的參數

Restful是一種軟體架構風格、設定風格,而不是标準,隻是提供了一組設計原則和限制條件。主要用于客服端和伺服器互動的軟體,基于這個風格設計的軟體可以更簡潔,更有層次,更易于實作緩存機制等

Restful風格的請求是使用“url+請求方式”表示一次請求的目的地,HTTP協定裡面四個表示操作方式的動詞如下

  • GET:用于擷取資源
  • POST:用于建立資源
  • PUT:用于更新資源
  • DELETE:用于删除資源

例如:

  • /user/1   GET:              得到id=1的user
  • /user.1   DELETE:        删除id=1的user
  • /user/1    PUT:             更新id=1的user
  • /user        POST:        新增user

上述url位址/user/1中的1就是要獲得的請求參數,在SpringMVC中可以使用占位符進行參數綁定。位址/user/1可以寫成/user/{id},占位符{id}對應的就是1的值。在業務方法中我們可以使用@PathVariable注解進行占位符的比對擷取工作。

SpringMVC全局亂碼過濾器、注解@RequestParam、自定義類型轉換器
//配置類,使用注解把這個類放到容器中
@Controller
@RequestMapping(value="/user")
    public class userController {
    //localhost:8080/quick17/zhangsan
    @RequestMapping(value = "/quick17/{username}",method=RequestMethod.GET) 
    @ResponseBody
    public void save17(@PathVariable(value = "username") String username)  {
        System.out.println(username);
    }
}
           
SpringMVC全局亂碼過濾器、注解@RequestParam、自定義類型轉換器

 控制台就會列印出張三

自定義類型轉換器

SpringMVC預設已經提供了一些常用的類型轉換器,例如用戶端送出得字元串轉化為int型進行參數設定但不是所有的資料類型都提供了轉換器,沒有提供的就需要自定義轉換器,例如:日期類型的資料就需要自定義轉換器。

自定義轉換器的開發步驟:

  • ①定義轉換器類實作Converter接口
  • ②在配置檔案中聲明轉換器
  • ③在<annotation-driven>中引用轉換器
時間類型的,Spring提供了yyyy/MM/dd的日期輸入格式,但是我們習慣使用,如2022-7-21而不會寫2022/7/21,我們沒按照規定寫就會報錯,是以我們配置自定義的轉換器

①定義轉換器類實作Converter接口

在converter包下。

package com.converter;

import org.springframework.core.convert.converter.Converter;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
//Converter<s,d>String類型轉date類型
public class DateConverter implements Converter<String, Date> {
    public Date convert(String dateStr) {
        //将日期的字元串轉換成日期對象 傳回
        SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd");
        Date date = null;
        try {
            date = format.parse(dateStr);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return date;
    }
}
           

②在配置檔案中聲明轉換器

spring-mvc.xml中

<!--申明轉換器 -->
    <bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
        <property name="converters">
            <list>
                <bean class="com.converter.DateConverter"/>
            </list>
        </property>
    </bean>
           

③在<annotation-driven>中引用轉換器

也在spring-mvc.xml中

<!--    mvc配置注解驅動-->
    <mvc:annotation-driven conversion-service="conversionService"/>
           
SpringMVC全局亂碼過濾器、注解@RequestParam、自定義類型轉換器

 獲得Servlet相關API

SpringMVC支援使用原始ServletAPI對象作為控制器方法的參數進行注入,常用的對象如下:

  • HttpServletyRequest
  • HttpServletResponse
  • HttpSession
SpringMVC全局亂碼過濾器、注解@RequestParam、自定義類型轉換器

會列印一些位址。