文章目录
一、SpringMVC的请求参数类型?
1.基本数据类型
2.POJO类型
3.数组类型
4.集合类型
二、具体使用
1.基本数据类型
Controller的方法参数的参数名要和请求参数名相同,参数值自动映射
代码如下(示例):
2.POJO数据类型
(传统方式):getParamterMap得到map集合
要求请求参数中的参数名对应类方法中的setter方法后通过javaBean封装。
代码如下(示例):
3.数组类型
代码如下(示例):
4.集合类型
method1:
获得集合时候要将集合参数包装到POJO当中
搭建VO类,封装集合中的数据类型
代码如下(示例):
method2(当客户端发起Ajax请求):
当客户端发起Ajax请求时,可以ContentType的类型为json类型,那
么在方法参数位置加上@RequestBody可以直接收集集合数据,无需在使用POJO封装。
代码如下(示例):
问题(静态资源无法访问):
前端控制器的配置:
<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
控制器会将jquery作为访问的路径,自然找不到对应的mapping。
解决思路:
1.开放静态资源
<mvc:resources mapping="/js/**" location="/js/" />
2.权限交付
当spring-mvc匹配不到对应的地址后就将权限交给原始的容器去寻找(当前使用的是tomcat)
<mvc:default-servlet-handle />
三、配置全局乱码过滤器
配置filter:
<!-- 配置全局过滤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>
四、参数绑定注解
前提:当请求参数与Controller业务方法对应的参数名称不相同时,需要通过@RequestParam注解显示绑定
代码如下(示例):
@RequestParam参数:
1.value:请求参数名称
2.required:指定请求参数是否必要,默认为true,当请求没有该参数时会报错。
3.defaultValue:当没有该参数时,使用默认参数
五、Restful风格参数的获取
1.概念
Restful是一种架构风格,而并不是标准,只是提供了一种设计原则和约束条件,使得设计风格更加简洁有层次感,更易于缓存机制。
2.HTTP协议的操作方式
1.GET:用于获取资源
2.Post:用于新建资源
3.PUT:用于更新资源
4.DELETE:用于删除资源
3.实例
代码如下(示例):
六、自定义类型转换器
1.定义转换器类实现Converter接口
代码如下(示例):
2.在配置文件中声明转换器
<!-- 声明转换器-->
<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters">
<list>
<bean class="converter.DataConverter"></bean>
</list>
</property>
</bean>
</beans>
3.引用转换器
<!-- 注解驱动:自动加载三大组件 自动配置json转换-->
<mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>
七、获取请求头
1.使用@RequestHeader可以获得请求头信息,相当于web阶段的request.getHeader(name)。
2.@CookieValue用于获取Cookie信息
八、文件上传
1.文件上传客户端三要素
① 表单项type=“file”
② 表单提交方式为Post
③ 表单的enctype属性值必须为multipart/form-data
值 | 描述 |
---|---|
application/x-www-form-urlencoded | 在发送前编码所有字符(默认) |
multipart/form-data | 不对字符编码。在使用包含文件上传控件的表单时,必须使用该值。 |
text/plain | 空格转换为 “+” 加号,但不对特殊字符编码。 |
2.原理
① 当表单修改为多部分表单时request.getParameter将失效
② 请求体的正文内容变成了多部分形式
3.单文件上传步骤
① 导入fileupload和io的坐标
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
② 配置文件上传解析器
<!-- 配置文件上传解析器-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="UTF-8"></property>
<property name="maxUploadSize" value="50000"></property>
</bean>
③ 编写文件上传编码
@RequestMapping("/main8")
public void save8(String name , MultipartFile filename){
System.out.println(filename);
}
注:MultipartFile对应的对象名要和文件请求的name相同
4.文件存储
MutipartFile中存在方法transferTo,只需传递File对象即可保存上传的文件。
@RequestMapping("/main8")
public void save8(String name , MultipartFile filename) throws IOException {
System.out.println(filename);
String originalFilename = filename.getOriginalFilename();
filename.transferTo(new File("xxxxxxxxxx"));
}
5.多文件上传
MultipartFile数组作为参数即可。