引入:
现在开发中springboot工程一般都是使用REST风格开发(Representational State Transfer – 表现形式状态转换)
区别对比:
- 传统风格资源描述形式
http://localhost/user/getById?id=1
http://localhost/user/saveUser - REST风格描述形式
http://localhost/user/1
http://localhost/user - 优点:
- 隐藏资源的访问行为,无法通过地址得知对资源是何种操作
- 书写简化
Rest风格如何通过url路径传递参数?
主要理解三个注解的使用:
@PathVariable介绍
- 名称:@PathVariable
- 类型:形参注解
- 位置:SpringMVC控制器方法形参定义前面
- 作用:绑定路径参数与处理器方法形参间的关系,要求路径参数名与形参名一一对应
- 场景: 请求参数为1个的时候很常用, 例如id参数请求, 状态参数等
使用示例:
// 如GET请求 请求url:http://localhost/user/1 这个1为方法形参直接传递来的,那么就可以使用@PathVariable注解将形参与路径参数绑定(使用占位符{}),两者的名称要保持一致,如不一致需要在注解里value指定占位符名称,如@PathVariable("id")
@GetMapping("/users/{id}")
@ResponseBody
public User getUser(@PathVariable Integer id){
User user = userService.getUserbyId(id)
return user
}
@RequestMapping注解
- 名称:@RequestMapping
- 类型:方法注解 类注解
- 位置:SpringMVC控制器方法定义上方
- 作用:设置当前控制器方法请求访问路径,如果设置在类上统一设置当前控制器方法请求访问路径前缀
- 场景: 定义访问的路径
使用示例:
// 请求url:http://localhost/user/save,主要用来定义访问的路径设置
@Controller
// 类上方配置的请求映射与方法上面配置的请求映射连接在一起,形成完整的请求映射路径
@RequestMapping("/user")
public class UserController {
//请求路径映射
@RequestMapping("/save") //此时save方法的访问路径是:/user/save
@ResponseBody
public String save(){
System.out.println("user save ...");
return "{'module':'user save'}";
}
}
注意: 如果使用此注解时没有配合指定的HTTP请求方法时, 那么默认情况下, 这个请求会接受GET/POST/PUT/DELETE/HEAD/OPTIONS 等所有HTTP请求方法
@RequestBody注解
- 名称:@RequestBody
- 类型:形参注解
- 位置:SpringMVC控制器方法形参定义前面
- 作用:将请求中请求体所包含的数据传递给请求参数,此注解一个处理器方法只能使用一次
- 场景: 请求参数超过1个 , json格式参数传输, 表单数据传输 , 对象数据请求, 实际开发常用POST请求方法
使用示例:
// 请求url:http://localhost/pojoParamForJson
// 企业实际开发基本都是使用json格式请求参数【application/json】
// 使用@RequestBody注解将外部传递的json数据映射到形参的实体类对象中,要求属性名称一一对应
@RequestMapping("/pojoParamForJson")
@ResponseBody
public String pojoParamForJson(@RequestBody User user){
System.out.println("pojo(json)参数传递 user ==> "+user);
return "{'module':'pojo for json param'}";
}
// 请求url:http://localhost/listPojoParamForJson
// 此注解也可用来接受多个pojo类型的json数组集合参数
@RequestMapping("/listPojoParamForJson")
@ResponseBody
public String listPojoParamForJson(@RequestBody List<User> list){
System.out.println("list pojo(json)参数传递 list ==> "+list);
return "{'module':'list pojo for json param'}";
}
@RequestParam注解
- 名称:@RequestParam
- 类型:形参注解
- 位置:SpringMVC控制器方法形参定义前面
- 作用:绑定请求参数与处理器方法形参间的关系
- 场景: url地址传参, 表单传参【application/x-www-form-urlencoded】, 发送非json数据
- 参数:
- required:是否为必传参数
- defaultValue:参数默认值
使用示例:
// 请求url:http://localhost/select?name=zs&age=18
// 常用于传递普通参数:请求参数名与形参名不同时,使用此注解关联请求参数名称与形参名称之间的关系
@RequestMapping("/select")
@ResponseBody
// 方法形参是username,实际url地址是name,需要使用此注解进行映射
public String select(@RequestParam("name") String userName , int age){
System.out.println("普通参数传递 userName ==> "+userName);
System.out.println("普通参数传递 age ==> "+age);
return username;
}
// 如果请求参数名称和方法形参名称一致,不需要加此注解,也可以成功访问
小结:
- 后期开发中,发送请求参数超过1个时,以json格式为主,使用@RequestBody
- 如果发送非json格式数据,选用@RequestParam接收请求参数
- 采用RESTful进行开发,当参数数量较少时,例如1个,可以采用@PathVariable接收请求路径变量,通常用于传递id值
注意:url中的请求参数是键值对的形式, 形式是?分隔, 键值对以&区分, 以上注解都无需添加, 会自动解析拼成, ajax函数中的请求参数未写时,也无需加,但是建议使用实例类对象形参接受解析, 拓展性更好