首先明确这样一个问题:
SpirngMVC默认如何获取请求带来的各种信息?
默认方式获取请求参数直接给方法入参上写一个和请求参数名相同的变量,这个变量就来接受请求参数的值。例如:
@RequestMapping("/handle01")
public String handle01(String username){
System.out.println("这个变量的值:" + username);
return "success";
}
1.当请求是localhost:8080/handle01?username=yst时,handle01里的username会自动匹配yst。所以输出:
这个变量值:yst
2.当请求是localhost:8080/handle01?user=yst时,handle01里的username匹配不到值,因为请求里没有username。所以输出:
这个变量值:null@RequestParam注解
如果用此注解,参数默认是必须带的。它有如下方法:
value:映射请求参数名称required:设置请求参数是否必须的defaultValue:设置默认值,当没有传递参数时使用该值
形式:
@RequestMapping("/handle02")
public String handle02(@RequestParam("username") String username){
System.out.println("这个变量的值:" + username);
return "success";
}
1.必须带有参数。
也就是说你直接输入localhost:8080/handle02会报错,不会执行方法只能输入localhost:8080/list?username=?才能执行相应的方法。
2.假如将@RequestParam("username") 改成了@RequestParam("user"):
@RequestMapping("/handle02")
public String handle02(@RequestParam("user") String username){
System.out.println("这个变量的值:" + username);
return "success";
}
请求是localhost:8080/handle01?user=yst时,可以成功输出:
这个变量值:yst
3.设置required为false可以不带参数。
@RequestMapping("/handle02")
public String handle02(@RequestParam(value="user",required=false) String username){
System.out.println("这个变量的值:" + username);
return "success";
}
4.设置defaultValue就可以在地址里面不带参数,如果带了参数会接收,不带参数会默认为该值。
@RequestMapping("/handle02")
public String handle02(@RequestParam(value="user", required=false, defaultValue="visitor01") String username){
System.out.println("这个变量的值:" + username);
return "success";
}
@RequestHeader注解
使用 @RequestHeader 绑定请求报头的属性值。请求头包含了若干个属性,服务器可据此获知客户端的信息,通过 @RequestHeader 即可将请求头中的属性值绑定到处理方法的入参中 。
使用起来同@RequestParam,只不过映射的信息由URL中的参数变成了Header中的键值对。
@RequestMapping(value="/testRequestHeader")
public String testRequestHeader(@RequestHeader(value="Accept-Language") String al){
System.out.println("testRequestHeader - Accept-Language:" + al);
return "success";
}



