获取请求携带的三种数据:参数、请求头信息、Cookie
@RequestMapping("/param")
public String getParam(
@RequestParam(value = "userName", required = true, defaultValue = "hello") String username,
String password,
@RequestHeader("referer") String referer,
@CookieValue("JSESSIONID") String jsessionId
){
System.out.println("jsessionId:"+jsessionId);
System.out.println("referer:"+referer);
System.out.println("username:"+username+",password:"+password);
return "success";
}
获取参数
获取参数有两种方法,一种是原生ServletAPI,通过请求传递的 HttpServletRequest request,但既然使用了SpringMVC框架,必然有更简便的方法可以使用 -- 注解声明参数
1. 通过控制器方法的形参获取
- 只需要在控制器方法的形参位置,设置一个形参,形参的名字和请求参数的名字一致即可
2. @RequestParam:将请求参数和控制器方法的形参绑定
- @RequestParam 注解的三个属性:value、required、defaultValue
- value : 设置和形参绑定的请求参数的名字
- **required : **设置是否必须传输value所对应的请求参数,默认值为true,表示value所对应的请求参数必须传输,否则页面报错:400 - Required String parameter 'xxx' is not present
- 若设置为false,则表示value所对应的请求参数不是必须传输,若为传输,则形参值为null
-
**defaultValue : **设置当没有传输value所对应的请求参数时,为形参设置的默认值,此时和required属性值无关
-
@RequestParam(value = "userName", required = true, defaultValue = "hello") String username, String password
3. 实体类获取请求携带的参数
请求携带的参数名必须和实体类的属性一致,则控制器会自动将同名的参数填入实体类的属性,方法中直接使用实体类对象
- 需要在控制器方法的形参位置设置实体类类型的形参,要保证实体类中的属性的属性名和请求参数的名字一致
- 可以通过实体类类型的形参获取请求参数
@RequestMapping("/param/pojo")
public String getParamByPojo(User user){
System.out.println(user);
return "success";
}
获取请求头信息
@RequestHeader:将请求头信息和控制器方法的形参绑定
同样有三个属性,value required defaultValue
-
@RequestHeader("referer") String referer
获取Cookie
@CookieValue:将cookie数据和控制器方法的形参绑定
同样有三个属性,value required defaultValue
-
@CookieValue("JSESSIONID") String jsessionId
请求参数的乱码问题
表单提交post请求,中文乱码,username=??????
在web.xml中配置过滤所有请求的过滤器,为所有请求设置UTF-8编码
<!--配置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>
特别注意,SpringMVC中处理编码的过滤器一定要配置到其他过滤器之前,否则无效
因为设置编码必须在所有请求之前,如果已经有请求发生后再设置编码,则设置无效
标签:实体类,请求,形参,value,String,参数,SpringMVC04 From: https://www.cnblogs.com/Ashen-/p/17124843.html