通过ServletAPI获取
- 将HttpServletRequest作为控制器方法的形参,接收DispacherSerlvet传入的request
- 使用方法与javaweb中request一致
req.getParameter("参数名");
req.getSession();
req.setAttribute(, );
通过控制器方法的形参获取请求
- 在控制器方法中设置和请求参数同名的形参
- 假如我的请求参数为username=123&password=456
- 那么控制器方法(String username,String password)
- username和password能够过的请求参数的值
- 如果控制器方法中形参名和请求参数名不一致
- 使用注解@RequestParam定义映射关系
- value属性,写请求参数名的
- @RequestParam有属性required,它为true要求必须传入你设置的这个参数,不然报错,为false则可传可不传,不传这个参数值就是默认值null
public String hello(@RequestParam(value = "userName",required = false) String username)
- 属性defaultValue,可以设置默认值,在@RequestParam中的传参顺序,它会先将默认值赋给控制器形参,再判断请求中有无该形参,之后就和required属性有关了
- 假如我的请求参数名是userName,控制器方法参数名是username
public String hello(@RequestParam("userName") String username)
这样设置
- @RequestHeader和@CookieValue
- @RequestHeader:将请求头信息和控制器方法的形参绑定
- @CookieValue:将cookie数据和控制器方法的形参绑定
- 使用方法与@RequestParam一致,也是那三个属性
通过pojo获取请求参数
- 如果说请求参数很多,我们不可能写那么多形参来对应,我们可以使用一个pojo类来封装接收这些参数,要求请求参数名和pojo的属性名一致
- 如果请求参数名和pojo属性名不一致,那么pojo中的属性将不被赋值,为null
解决获取请求参数的乱码问题
- 如果你的get方式获得参数的时候出现乱码,可以在tomcat的conf文件夹中修改server.xml文件,在
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" maxParameterCount="1000"/>
中加入URIENcoding=“UTF-8” - 如果post方式也有乱码
<!-- 配置spring过滤器-->
<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>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>