目錄
配置全局亂碼過濾器
參數綁定注解@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注解顯式的綁定

業務方法中的參數為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注解進行占位符的比對擷取工作。
//配置類,使用注解把這個類放到容器中
@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預設已經提供了一些常用的類型轉換器,例如用戶端送出得字元串轉化為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"/>
獲得Servlet相關API
SpringMVC支援使用原始ServletAPI對象作為控制器方法的參數進行注入,常用的對象如下:
- HttpServletyRequest
- HttpServletResponse
- HttpSession
會列印一些位址。