@PathVariable
、@RequestParam
、@RequestHeader
等)、默认方式获取请求参数: 直接给控制器方法入参上写一个和请求参数名相同的变量。这个变量就来接收请求参数的值;
* 带:有值
* 没带:null;
前端
<a href="handle?username=tomcat">helloworld</a><br/>
后端
@RequestMapping("/handle")
public String handle(String username){
System.out.println("这个变量的值"+username);
//这个变量的值tomcat
return "success";
}
@RequestParam:获取请求参数的;参数默认是必须带的;
@RequestParam("user")String username
等效于原来的username =request.getParameter("user")
前端
<a href="handle01?user=tomcat">helloworld</a><br/>
后端
@RequestMapping("/handle01")
public String handle01(@RequestParam("user")String username){
System.out.println("这个变量的值"+username);
//这个变量的值tomcat
return "success";
}
@RequestParam
三个属性
value
:参数名,指定要获取的参数的keyrequired
:是否必须。默认为 true, 表示请求参数中必须包含对应的参数,若不存在,将抛出异常defaultValue
: 默认值,当没有传递参数时使用该值@PathVariable
和 @RequestParam
的区别@PathVariable("user")
对应的url /book/{user}
@RequestParam("user")
对应的url/book?user=admin
@RequestHeader
绑定请求报头的属性值@RequestHeader("User-Agent")String userAgent
等效于原来的userAgent = request.getHeader(“User-Agent”)@RequestHeader()
注解注解有三个属性value()
required()
defaultValue()
;value
:参数名,指定要获取的参数的keyrequired
:是否必须。默认为 true, 表示请求参数中必须包含对应的参数,若不存在,将抛出异常defaultValue
: 默认值,当没有传递参数时使用该值//了解: 映射请求头信息 用法同 @RequestParam
@RequestMapping(value="/testRequestHeader")
public String testRequestHeader(@RequestHeader(value="Accept-Language") String al){
System.out.println("testRequestHeader - Accept-Language:"+al);
return "success";
}
<!-- 测试 请求头@RequestHeader 注解使用 -->
<a href="springmvc/testRequestHeader">testRequestHeader</a>
@CookieValue
可让处理方法入参绑定某个 Cookie 值以前的操作
获取某个cookie的值; 以前的操作获取某个cookie;
Cookie[] cookies =request.getCookies();
for(Cookie c:cookies){
if(c.getName().equals("JSESSIONID")){
String cv = c.getValue();
} }
@CookieValue
value
:参数名,指定要获取的参数的keyrequired
:是否必须。默认为 true, 表示请求参数中必须包含对应的参数,若不存在,将抛出异常defaultValue
: 默认值,当没有传递参数时使用该值@RequestMapping("/handle01")
public String handle01(@CookieValue(value="JSESSIONID",required=false)String jid) {
System.out.println("cookie中的jid的值"+jid);
return "success";
}
dept.deptId、dept.address.tel
等① 增加控制器方法、表单页面
后端
/**
* Spring MVC 会按请求参数名和 POJO 属性名进行自动匹配, 自动为该对象填充属性值。
* 支持级联属性
* 如:dept.deptId、dept.address.tel 等
*/
@RequestMapping("/testPOJO")
public String testPojo(User user) {
System.out.println("testPojo: " + user);
return "success";
}
前台
<!-- 测试 POJO 对象传参,支持级联属性 -->
<form action=" testPOJO" method="POST">
username: <input type="text" name="username"/><br>
password: <input type="password" name="password"/><br>
email: <input type="text" name="email"/><br>
age: <input type="text" name="age"/><br>
city: <input type="text" name="address.city"/><br>
province: <input type="text" name="address.province"/>
<input type="submit" value="Submit"/>
</form>
② 增加实体类
public class Address {
private String province;
private String city;
//get/set
}
public class User {
private Integer id ;
private String username;
private String password;
private String email;
private int age;
private Address address;
//get/set
}
③ 如果中文有乱码,需要配置字符编码过滤器,且配置其他过滤器之前,如(HiddenHttpMethodFilter
),否则不起作用。
提交的数据可能有乱码:
CharacterEncodingFilter
<filter>
<filter-name>CharacterEncodingFilterfilter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilterfilter-class>
<init-param>
<param-name>encodingparam-name>
<param-value>UTF-8param-value>
init-param>
<init-param>
<param-name>forceEncodingparam-name>
<param-value>trueparam-value>
init-param>
filter>
<filter-mapping>
<filter-name>CharacterEncodingFilterfilter-name>
<url-pattern>/*url-pattern>
filter-mapping>