3获得请求参数
3.1基本数据类型
1.controller
@RequestMapping(value = "/quick10") @ResponseBody public void save10(String username,int age) throws Exception{ System.out.println(username); System.out.println(age); }
2.发送请求,获取参数成功
3.2.Pojo参数类型,封装类
@RequestMapping(value = "/quick11") @ResponseBody public void save11(User user) throws Exception{ System.out.println(user); }
3.3数组类型参数
Controller中的数组名称与请求参数的name一致,参数会自动映射匹配
3.4.集合类型参数
1集合类型参数1
封装集合
@RequestMapping(value = "/quick13") @ResponseBody public void save13(Vo vo) throws Exception{ System.out.println(vo); }
2.集合类型参数2
1.引入jquery-3.3.1.js
2.发送ajax请求
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> <script src="${pageContext.request.contextPath}/js/jquery-3.3.1.js"></script> <script> var userlist=new Array(); userlist.push({name:"zhangsan",age:19}); userlist.push({name:"zhangsan",age:29}); $.ajax({ type:"POST", url:"${pageContext.request.contextPath}/quick13", data:JSON.stringify(userlist), contentType:"application/json;charset=utf-8" }); </script> </head> <body> </body> </html>
3.配置spring-mvc.xml 开启静态资源访问
<!--开启静态资源的访问--> <!--<mvc:resources mapping="/js/**" location="/js/"/>--> <!--<mvc:resources mapping="/img/**" location="/img/"/>--> <!--交给原始容器 tocat内部机制找静态资源--> <mvc:default-servlet-handler/>
4.服务端参数接收
@RequestMapping(value = "/quick13") @ResponseBody public void save13(@RequestBody List<User> userList) { System.out.println(userList); }
3.5.配置中文乱码过滤器 web.xml
<!--配置全局过滤filter--> <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>
3.6参数绑定注解@RequestBody
value:与请求参数名称
required:此在指定的请求参数是否必须包括,默认true,提交时没有此参数提示报错
defaultValue:当没有指定请求参数时,则使用指定的默认值赋值
@RequestMapping(value = "/quick15") @ResponseBody public void save15(@RequestParam(value = "username",required = true,defaultValue = "张三") String name) throws Exception{ System.out.println(name); }
测试成功
3.7获得Restful风格的参数
测试代码controller
@RequestMapping(value = "/quick16/{name}",method = RequestMethod.GET) @ResponseBody public void save16(@PathVariable(value = "name") String name){ System.out.println(name); }
运行结果
3.8自定义类型转换器
SpringMVC虽然默认提供了一些常用的类型转换器,但不是所有的数据类型都提供了转换器,没有提供就自定义转换器,例如日期类型。
自定义类型转换器的开发步骤
1)定义转换器类实现Converter接口
package com.hzw;
import org.springframework.core.convert.converter.Converter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class converter implements Converter<String,Date> {
public Date convert(String source) {
//将日期字符串转换成日期对象 返回
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Date date=null;
try {
date = format.parse(source);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
}
2)在配置文件中声明转换器
<!--声明转换器--> <bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean"> <property name="converters"> <list> <bean class="com.hzw.converter"></bean> </list> </property> </bean>
3)在<annotation-diven>中引用转换器
<!--mvc注解驱动--> <mvc:annotation-driven conversion-service="conversionService"/>
测试类
@RequestMapping(value = "/quick17",method = RequestMethod.GET) @ResponseBody public void save17(Date date){ System.out.println(date); }
测试结果 日期类型yyyy-MM-dd转换成功
3.9获取Servlet相关API
SpringMVC支持使用原始SercletAPI对象作为控制器方法的参数进行注入,常用的对象如下:
HttpServletRequest
HttpServletResponse
HttpSession
直接获取
@RequestMapping(value = "/quick18",method = RequestMethod.GET) @ResponseBody public void save18(HttpServletRequest request, HttpServletResponse response, HttpSession httpSession){ System.out.println(request); System.out.println(response); System.out.println(httpSession); }
3.10获取请求头
1.@RequestHeader
使用@Request可以获取请求头信息,相当于web阶段学习的request.getHeader(name)
@RequestHeader注解的属性如下
value:请求头名称
required:是否必须携带此请求头
@RequestMapping(value = "/quick19",method = RequestMethod.GET) @ResponseBody public void save19(@RequestHeader(value = "User-Agent",required = false) String hzw){ System.out.println(hzw); }
3.11@CookieValue
使用@CookieValue可以获取指定的Cookie的值
@CookieValue注解的属性如下
value:指定的cookie的名称
required:是否必须携带此cookie
@RequestMapping(value = "/quick20",method = RequestMethod.GET) @ResponseBody public void save20(@CookieValue(value = "JSESSIONID",required = false) String jsessionid){ System.out.println(jsessionid); }
3.12文件上传
文件上传原理
当form表单修改为多部分表单时,request.getParameter()将失效。
enctype="application/x-www.form-urllencoder"时,form表单的正文内容格式是:
key=value&key=value&key=value
当form表单的enctype取值为Multipart/form-data时,请求内容会变成多部分形式
单文件上传步骤
(1).导入flieupload和io坐标
<dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.2</version> </dependency> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.4</version> </dependency>
(2).配置文件上传解析器
<!-- -配置文件解析器,处理文件,将客户端上传的File文件,处理为MultipartFile--> <bean id ="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!-- 设置文件解析的编码,注意:一定要和页面的pageEncoding保持一致 --> <property name="defaultEncoding" value="UTF-8"></property> <!-- 设置最大上传文件大小 --> <property name="maxUploadSize" value="999999"></property> </bean>
(3).编写文件上传代码
upload.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <form action="${pageContext.request.contextPath}/quick21" method="post" enctype="multipart/form-data"> 头像:<input type="file" name="uploadFile"> 描述:<input type="text" name="username"> <input type="submit" value="上传"> </form> </body> </html>
controller
@ResponseBody @RequestMapping(value = "/quick21",method = RequestMethod.POST) public void save21(String username, MultipartFile uploadFile) throws IOException { System.out.println(username); String filename = uploadFile.getOriginalFilename(); System.out.println(filename); // uploadFile.transferTo(new File("D:\\upload\\"+filename)); }