SpringMVC@RequestHeader与@RequestParam的区别
Posted The Gao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringMVC@RequestHeader与@RequestParam的区别相关的知识,希望对你有一定的参考价值。
首先明确这样一个问题:
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";
以上是关于SpringMVC@RequestHeader与@RequestParam的区别的主要内容,如果未能解决你的问题,请参考以下文章
SpringMVC@RequestHeader与@RequestParam的区别