请求数据
说明:
SpringMVC提供了从请求对象中获取请求数据的 两种 方式 : 自动获取 和 手动获取 .
注意 :
- 若注入的数据乱码或类型不匹配,会导致注入失败.[性别乱码,年龄非数字]
- 被注入数据的对象,无需装入Spring容器[无需@Component标注].
备注:反射原理实现,所以无需把注入数据的对象装入Spring容器
自动获取
1.当请求参数名与处理方法参数名相同时,SpringMVC将请求中参数的值赋给方法的同名参数.

2.SpringMVC支持级联属性[复杂参数],将请求参数名与方法参数表示的对象的属性名匹配,并进行赋值.

补充:如果一级复合对象中还有复合对象,使用二级复合对象,要用一级符合对象名打点调用二级复合对象名,例如图中:
dept.deptName
3.若请求中不含与"处理方法参数"同名的参数时,SpringMVC将null作为处理方法的参数的值 [ null值无法转为基本数据类型 ] .
注意(自动获取和手动获取都要注意):
因为null无法转为基本数据类型,int,char...都属于基本数据类型(点击详情)
如果方法参数中有基本数据类型参数,对应(基本数据类型)参数传过去一个null值会报错
所以在方法参数中用封装类型代替基本数据类型,如int - Integer , char - Character【封装类型可以赋 null 或原本类型值】
POST 请求编码处理,配置编码过滤器 :
说明:
1. 因为为了保证数据安全,一般都是POST方式提交,所以需要配置编码过滤器,把请求来的数据转换为utf-8格式
2. 编码过滤器固定格式内容
3. 编码过滤器配置在web.xml中,写在<web-app>标签下...

代码:
<!-- 配置编码过滤器,防止请求数据类型转换失败: 只对POST请求有效 -->
<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>
补充:
1.地址栏中最大1024 字节的请求内容 (也就是512中文)
2.编码过滤器原本只对POST请求有转码效果,但是,在IDEA中因为IDEA的特性,对POST和GET请求都有效
手动获取 :
说明 :
Spring提供了四种注解方式,编写在方法参数类型前,将指定数据名的值赋给标注的方法参数.
- @RequestParam(从请求参数中获得)
- @RequestHeader(从请求头中获得)
- @CookieValue(从客户端Cookie中获得)
- @PathVariable(从请求路径中获得)
- Servlet API(传统Servlet类方法中的写法)
备注 :
@RequestParam @RequestHeader @CookieValue @PathVariable
用法,格式和注释的参数完全相同,区别在于获得数据的来源不同
@RequestParam :
格式:
public 返回值 方法名(@RequestParam((参数列..) 参数类型 参名,..){
//方法体
}
说明:
- @RequestParam获得请求中指定参数的值,赋给标注的方法参数.
- @RequestParam参数:
| 属性名 | 作用 |
| value | 将请求信息中指定参数名的值,赋给标注的参数 |
| defaultValue | 当请求信息中没有提供指定参数或参数为空时,将默认值赋给标注的参数 |
| required | 请求中是否必须有指定的参数.默认为true且未设置默认值,当请求中无指定参数时将报错 |
Servlet API类型参数:
若处理方法含有Servlet API类型参数,SpringMVC会自动向处理方法注入Servlet API参数值.
SpringMVC支持以下类型参数的注入.
- HttpServletRequest
- HttpServletResponse
- HttpSession
- java.security.Principal
- Locale
- InputStream
- OutputStream
- Reader
- Writer
格式:
@RequestMapping(value="/映射路径")
权限 返回值 方法名(HttpServletRequest request,..){
//方法体
}
说明:
当执行处理方法时,SpringMVC自动将Servlet相关对象传递给方法参数
此手动获取方法和传统的Servlet文件中获取提交数据写法一致,更方便的是还会被编码过滤器过滤,省去了在Servlet文件中写时还需写这两行代码来进行转码:
response.setContentType("text/html;charset=UTF-8");
request.setCharacterEncoding("utf-8");
Writer对象获取 [ response.getWriter ( ) ]

3万+

被折叠的 条评论
为什么被折叠?



