1. @PathVariable
https://losthost:8080/index/user/{username}
@RequestMapping注解的方法来处理/user/{username}的请求,对于相同模式的URL,可以在@RequestMapping注解中用{ }来表明它的变量部分。在路由中定义变量规则后,当我们想要获取这个URL的具体值,可以用SpringMVC提供的@PathVariable
@RequestMapping(value="/user/{username}")
public String userProfile(@PathVariable(value="username") String username) {
return "user"+username;
}
@PathVariable注解的应用
- 当@Controller处理HTTP请求时,单参数的请求可以不加value属性,会自动设置为对应变量username(同名赋值)的值。
- 在默认情况下,Spring会对@PathVariable注解的变量进行自动赋值,也可以指定@PathVariable使用哪一个URL中的变量。
- 多个URL参数的情况,Spring能够根据名字自动赋值对应的函数参数值,当然也可以在@PathVariable使用value属性显示对应具体的URL变量值。
- @PathVariable注解的参数可以是一些基本的简单类型:int,long,Date,String等,Spring能够根据URL变量的具体值及函数参数类型来进行转换
2. @RequestParam
https://losthost:8080/index/user?key1=value1&key2=value2
HTTP协议中的Request参数,?key1=value1&key2=value2就是搜索请求的参数,不同参数之间用&分隔,key1=value1分别表示参数名字和参数值。
在SpringMVC框架中,可以通过定义@RequestMapping来处理URL请求。和@PathVariable一样,需要在处理URL的函数中获取URL中的参数。通过注解@RequestParam可以将URL中的参数绑定到处理函数方法的变量中:
@RequestMapping(value="/user")
public String getUserBlog(@RequestParam(value="id") int blogId) {
return "blogId="+blogId;
}
3. @RequestBody注解
@RequestBody注解一般主要是用来处理content-type:"application/json charset=utf-8"或者content-type:"application/xml charset=utf-8"两种请求数据,一般是异步请求用,例如:
$.ajax({
url:"/hello",
type:"POST",
data:'{"id":"123","name":"chenyc"}',
content-type:"application/json charset=utf-8",
success:function(data){
alert(data);
}
});
@RequestBody注解就可以获取到请求中的各个参数然后赋值到相对应的方法形参上,另外,当有一个实体类User包含了id和name的元素的话,在方法里面直接可以写@RequestBody User user就会自动封装好给我们使用的了,不用麻烦像这样@requestBody Integer id,@requestBody String name一个一个的封装
@PostMapping("/merchants/register")
public MerchantRegisterVO registerMerchant(@RequestBody UVO merchantRegisterVO){
return UserVO;
}
4. @RequestParam和@PathVariable相同点与区别
@RequestParam和@PathVariable本质上都是获取用户输入的注解,只不过输入的部分不同,一个在URL路径部分,另一个在参数部分。
1、当URL指向的是某一具体业务资源(或资源列表),例如博客,用户时,使用@PathVariable
2、当URL需要对资源或者资源列表进行过滤,筛选时,用@RequestParam
3、当参数不一定存在时,可以通过定义required属性:
@RequestParam(value = "id", required = false)
4、在参数不存在的情况下,可以设置变量默认值:
@RequestParam(value = "id", required = false, defaultValue = "0")