Spring08 第八 springMVC 获取请求数据

2. SpringMVC获得请求数据

2.1 获得请求参数

客户端请求参数的格式是:name=value&name=value… …

服务器端要获得请求的参数,有时还需要进行数据的封装,SpringMVC可以接收如下类型的参数:

基本类型参数POJO类型参数数组类型参数集合类型参数

 

2.2 获得基本类型参数

Controller中的业务方法的参数名称要与请求参数的name一致,参数值会自动映射匹配。

http://localhost:8080/ /quick9?username=zhangsan&age=12

@RequestMapping("/quick9")

@ResponseBody

public void quickMethod9(String username,int age) throws IOException {System.out.println(username);System.out.println(age);}

 

2.3 获得POJO类型参数

Controller中的业务方法的POJO参数的属性名与请求参数的name一致,参数值会自动映射匹配。

http://localhost:8080/ /quick9?username=zhangsan&age=12

 

public class User {

private String username;private int age; }

@RequestMapping("/quick10")

@ResponseBody

public void quickMethod10(User user) throws IOException {System.out.println(user);}

 

2.4 获得数组类型参数

Controller中的业务方法数组名称与请求参数的name一致,参数值会自动映射匹配。

http://localhost:8080/ /quick11?strs=111&strs=222&strs=333

@RequestMapping("/quick11")

@ResponseBody

public void quickMethod11(String[] strs) throws IOException {

System.out.println(Arrays.asList(strs));}

 

2.5 获得集合类型参数获得集合参数时,要将集合参数包装到一个POJO中才可以。

<form action="${pageContext.request.contextPath}/quick12" method="post">

<input type="text" name="userList[0].username"><br>

<input type="text" name="userList[0].age"><br>

<input type="text" name="userList[1].username"><br>

<input type="text" name="userList[1].age"><br>

<input type="submit" value="提交"><br>

</form>

@RequestMapping("/quick12")

@ResponseBody

public void quickMethod12(Vo vo) throws IOException {System.out.println(vo.getUserList());}

 

2.6 请求数据乱码问题

当post请求时,数据会出现乱码,我们可以设置一个过滤器来进行编码的过滤,在web.xml中配置。【get请求不会乱码】

<filter>

<filter-name>CharacterEncodingFilter</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>CharacterEncodingFilter</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

 

2.7 参数绑定注解@requestParam当请求的参数名称与Controller的业务方法参数名称不一致时,就需要通过@RequestParam注解显示的绑定。

<form action="${pageContext.request.contextPath}/quick14" method="post">

<input type="text" name="name"><br>

<input type="submit" value="提交"><br>

</form>

@RequestMapping("/quick14")

@ResponseBody

public void quickMethod14(@RequestParam("name") String username) throws IOException {System.out.println(username);}

 

@RequestParam还有如下参数可以使用:

value:与请求参数名称

required:此在指定的请求参数是否必须包括,默认是true,提交时如果没有此参数则报错

defaultValue:当没有指定请求参数时,则使用指定的默认值赋值

@RequestMapping("/quick14")

@ResponseBody

public void quickMethod14(

@RequestParam(value="name",required = false,defaultValue = "itcast") String username) throws IOException {System.out.println(username);}

 

2.8 springmvc内置转换器和自定义转化器

在我们写的程序中,表单提交的无论是 int 还是 double 类型的请求参数,用于处理该请求

的处理器方法的形参,均可直接接收到相应类型的相应数据,而非接收到 String 再手工转换。

那是因为在 SpringMVC 框架中,有默认的类型转换器。这些默认的类型转换器,可以将 String

类型的数据,自动转换为相应类型的数据。

 

但默认类型转换器并不是可以将用户提交的 String,转换为所有用户需要的类型。此时,

就需要自定义类型转换器了。

  例如,在 SpringMVC 的默认类型转换器中,没有日期类型的转换器,因为日期的格式太

多。若要使表单中提交的日期字符串,被处理器方法形参直接接收为 java.util.Date,则需要自定义类型转换

 

器了

2.9 文件上传

 2.9.1. 文件上传客户端三要素

表单项type=“file”

表单的提交方式是post

表单的enctype属性是多部分表单形式,及enctype=“multipart/form-data”

<form action="${pageContext.request.contextPath}/quick20" method="post" enctype="multipart/form-data">

名称:<input type="text" name="name"><br>

文件:<input type="file" name=" uploadFile "><br>

<input type="submit" value="提交"><br></form>

 

2.9.2  文件上传

当form表单修改为多部分表单时,request.getParameter()将失效。

enctype=“application/x-www-form-urlencoded”时,form表单的正文内容格式是:key=value&key=value&key=value

当form表单的enctype取值为Mutilpart/form-data时,请求正文内容就变成多部分形式:

 

2.9.3  单文件上传步骤

①导入fileupload和io坐标②配置文件上传解析器③编写文件上传代码

①导入fileupload和io坐标

<dependency>

<groupId>commons-fileupload</groupId>

<artifactId>commons-fileupload</artifactId>

<version>1.2.2</version>

</dependency>

<dependency>

<groupId>commons-io</groupId>

<artifactId>commons-io</artifactId>

<version>2.4</version>

</dependency>

②springmvc.xml配置文件上传解析器

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">

<!--上传文件总大小-->

<property name="maxUploadSize" value="5242800"/>

<!--上传单个文件的大小-->

<property name="maxUploadSizePerFile" value="5242800"/>

<!--上传文件的编码类型-->

<property name="defaultEncoding" value="UTF-8"/></bean>

 

③编写文件上传代码

@RequestMapping("/quick20")

@ResponseBody

public void quickMethod20(String name,MultipartFile uploadFile) throws IOException {

//获得文件名称

String originalFilename = uploadFile.getOriginalFilename();

//保存文件

uploadFile.transferTo(new File("C:\\upload\\"+originalFilename));}

 

说明:文件:<input type="file" name=" uploadFile "><br>

     方法的形参MultipartFile uploadFile 必须和jsp中的input的name一致才可以

2.9.4 多文件上传

多文件上传,只需要将页面修改为多个文件上传项,将方法参数MultipartFile类型修改为MultipartFile[]即可

<h1>多文件上传测试</h1>

<form action="${pageContext.request.contextPath}/quick21" method="post" enctype="multipart/form-data">

名称:<input type="text" name="name"><br>

文件1:<input type="file" name="uploadFiles"><br>

文件2:<input type="file" name="uploadFiles"><br>

文件3:<input type="file" name="uploadFiles"><br>

<input type="submit" value="提交"><br></form>

 

@RequestMapping("/quick21")

@ResponseBody

public void quickMethod21(String name,MultipartFile[] uploadFiles) throws IOException {

for (MultipartFile uploadFile : uploadFiles){

String originalFilename = uploadFile.getOriginalFilename();

uploadFile.transferTo(new File("C:\\upload\\"+originalFilename));}}

 

posted @   烁妈妈  阅读(55)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示