目錄
?
一、使用Servlet原生對象獲取參數
1.1?控制器方法
1.2?測試結果
二、自定義參數類型轉換器
2.1?編寫類型轉換器類
2.2?注冊類型轉換器對象?
2.3?測試結果?
三、編碼過濾器
3.1?JSP表單
3.2?控制器方法
3.3?配置過濾器
3.4 測試結果?
往期專欄&文章相關導讀?
1. Maven系列專欄文章
2. Mybatis系列專欄文章
3. Spring系列專欄文章?
4. Spring MVC系列專欄文章
一、使用Servlet原生對象獲取參數
????????SpringMVC也支持使用Servlet原生對象,在方法參數中定義HttpServletRequest 、HttpServletResponse 、 HttpSession 等類型的參數即可直接在方法中使用。
1.1?控制器方法
// 使用Servlet原生對象
@RequestMapping("c1/param8")
public void servletParam(HttpSession session,HttpServletRequest request, HttpServletResponse response){
// 原生對象獲取參數
System.out.println(request.getParameter("name"));
System.out.println(response.getCharacterEncoding());
System.out.println(session.getId());
}
????????這個就是一個很經典的利用request內置對象獲取參數了。請求之后在控制臺打印參數和編碼方式還有對應的sessionId。
訪問路徑:http://localhost:8080/c1/param8?name=LYL
1.2?測試結果
?
????????OK,可以看得出來是已經成功把參數值和編碼方式和sessionId給查詢出來了
????????一般情況下,在SpringMVC中都有對Servlet原生對象的方法的替代,推薦使SpringMVC的方式代替Servlet原生對象。
二、自定義參數類型轉換器
前端傳來的參數全部為字符串類型,SpringMVC使用自帶的轉換器將字符串參數轉為需要的類型。如:
// 獲取簡單類型參數 @RequestMapping("/c1/param1") public void simpleParam(String username,int age){ System.out.println(username+" "+age); }但在某些情況下,無法將字符串轉為需要的類型,如:
// 自定義轉換日期格式字符串
@RequestMapping("c1/param9")
public void dataParam(Date birthday){
??? System.out.println(birthday);
}
此時我們測試一下看看是什么結果:
?
控制臺輸出:?
?
報錯原因:
[WARNING]Resolved[org.springframework.web.method.annotation.MethodArgumentTypeMismatchException: Failed to convert value of type 'java.lang.String' to required type 'java.util.Date'; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [java.util.Date] for value '2025-01-01'; nested exception is java.lang.IllegalArgumentException]
?具體意思就是:[org.springframework.web.method.annotation.MethodArgumentTypeMismatchException:未能將類型為“java.lang.String”的值轉換為所需類型“java.util.Date”;嵌套異常為org.springfframework.core.covert.ConversionFailedException:無法將值“2025-01-01”從類型[java.lang.SString]轉換為類型[java.util.Date];嵌套異常為java.lang.IllegalArgumentException]
2.1?編寫類型轉換器類
????????由于日期數據有很多種格式,SpringMVC沒辦法把所有格式的字符串轉換成日期類型。比如參數格式為 birthday=2025-01-01 時,SpringMVC就無法解析參數。此時需要自定義參數類型轉換器。 首先得定義類型轉換器類,實現Converter接口。寫法如下:??
package com.example.converter;
import org.springframework.core.convert.converter.Converter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DataConverter implements Converter<String, Date> {
/**
* 轉換方法
* @param s 轉換前的數據
* @return 轉換后的數據
*/
@Override
public Date convert(String s) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd");
Date date = null;
try{
date = sdf.parse(s);
} catch (ParseException e) {
System.out.println("轉換成日期格式出錯了!");
e.printStackTrace();
}
return date;
}
}
2.2?注冊類型轉換器對象?
<!-- 配置轉換器工廠 -->
<bean id="dateConverter" class="org.springframework.context.support.ConversionServiceFactoryBean">
<!-- 轉換器集合 -->
<property name="converters">
<set>
<!-- 自定義轉換器 -->
<bean class="com.example.converter.DataConverter"></bean>
</set>
</property>
</bean>
<!-- 使用轉換器工廠 -->
<mvc:annotation-driven conversion-service="dateConverter"></mvc:annotation-driven>
OK,加了上面這些我們再運行測試一遍看看控制能否成功接收?
2.3?測試結果?
?
?可以看到報的是404錯誤,沒有找到這個頁面,而不是400了
?
OK,控制臺也成功打印出來了。?
三、編碼過濾器
在傳遞參數時,tomcat8以上能處理get請求的中文亂碼,但不能處理post請求的中文亂碼
3.1?JSP表單
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>專屬頁面</title>
</head>
<body>
<form action="/c1/param3" method="post">
<table>
<tr>
<th>id:</th>
<td><input name="id"/></td>
</tr>
<tr>
<th>姓名:</th>
<td><input name="name"/></td>
</tr>
<tr>
<th>性別:</th>
<td><input name="sex"/></td>
</tr>
<tr>
<th>住址:</th>
<td><input name="address.info"/></td>
</tr>
<tr>
<th>郵編:</th>
<td><input name="address.postcode"/></td>
</tr>
<tr align="center">
<td><input type="submit"/></td>
</tr>
</table>
</form>
</body>
</html>
這里是一個表單提交的頁面
3.2?控制器方法
控制器方法我就沿用了之前的,如下:?
@RequestMapping("c1/param3")
public void objParam2(Student student){
System.out.println(student);
}
3.3?配置過濾器
????????SpringMVC提供了處理中文亂碼的過濾器,在web.xml中配置該過濾器即可解決中文亂碼問題:添加如下配置:
<!-- SpringMVC中提供的字符編碼過濾器,放在所有過濾器的最上方 -->
<filter>
<filter-name>encFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
3.4 測試結果?
?
????????提交上述信息,看看控制臺打印有沒有亂碼,如果沒有亂碼,則說明字符編碼過濾器配置成功。?
?
????????OK,說明確實是可以了,并且表單提交的name屬性和Student屬性對應的話,也是可以直接賦值給對應的參數的。
往期專欄&文章相關導讀?
?????大家如果對于本期內容有什么不了解的話也可以去看看往期的內容,下面列出了博主往期精心制作的Maven,Mybatis等專欄系列文章,走過路過不要錯過哎!如果對您有所幫助的話就點點贊,收藏一下啪。其中Spring專欄有些正在更,所以無法查看,但是當博主全部更完之后就可以看啦。文章來源:http://www.zghlxwxcb.cn/news/detail-496426.html
1. Maven系列專欄文章
Maven系列專欄 | Maven工程開發(fā) |
Maven聚合開發(fā)【實例詳解---5555字】 |
2. Mybatis系列專欄文章
Mybatis系列專欄 | MyBatis入門配置 |
Mybatis入門案例【超詳細】 | |
MyBatis配置文件 —— 相關標簽詳解 | |
Mybatis模糊查詢——三種定義參數方法和聚合查詢、主鍵回填 | |
Mybatis動態(tài)SQL查詢 --(附實戰(zhàn)案例--8888個字--88質量分) | |
Mybatis分頁查詢——四種傳參方式 | |
Mybatis一級緩存和二級緩存(帶測試方法) | |
Mybatis分解式查詢 | |
Mybatis關聯查詢【附實戰(zhàn)案例】 | |
MyBatis注解開發(fā)---實現增刪查改和動態(tài)SQL | |
MyBatis注解開發(fā)---實現自定義映射關系和關聯查詢 |
3. Spring系列專欄文章?
Spring系列專欄 | Spring IOC 入門簡介【自定義容器實例】 |
IOC使用Spring實現附實例詳解 | |
Spring IOC之對象的創(chuàng)建方式、策略及銷毀時機和生命周期且獲取方式 | |
Spring DI簡介及依賴注入方式和依賴注入類型 | |
Spring IOC相關注解運用——上篇 | |
Spring IOC相關注解運用——下篇 | |
Spring AOP簡介及相關案例 | |
注解、原生Spring、SchemaBased三種方式實現AOP【附詳細案例】 | |
Spring事務簡介及相關案例 | |
Spring 事務管理方案和事務管理器及事務控制的API | |
Spring 事務的相關配置、傳播行為、隔離級別及注解配置聲明式事務 |
4. Spring MVC系列專欄文章
SpringMVC系列專欄 | Spring MVC簡介附入門案例 |
Spring MVC各種參數獲取及獲取方式自定義類型轉換器和編碼過濾器 | |
Spring MVC獲取參數和自定義參數類型轉換器及編碼過濾器 | |
Spring MVC處理響應附案例詳解 | |
Spring MVC相關注解運用 —— 上篇 | |
Spring MVC相關注解運用 —— 中篇文章來源地址http://www.zghlxwxcb.cn/news/detail-496426.html | |
Spring MVC相關注解運用 —— 下篇 | |
Spring MVC多種情況下的文件上傳 | |
Spring MVC異步上傳、跨服務器上傳和文件下載 | |
Spring MVC異常處理【單個控制異常處理器、全局異常處理器、自定義異常處理器】 | |
Spring MVC攔截器和跨域請求 | |
SSM整合案例【C站講解最詳細流程的案例】 |
到了這里,關于Spring MVC獲取參數和自定義參數類型轉換器及編碼過濾器的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!