springboot restful 请求参数传递url设置方式

引入:

现在开发中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. 后期开发中,发送请求参数超过1个时,以json格式为主,使用@RequestBody
  2. 如果发送非json格式数据,选用@RequestParam接收请求参数
  3. 采用RESTful进行开发,当参数数量较少时,例如1个,可以采用@PathVariable接收请求路径变量,通常用于传递id值

注意:url中的请求参数是键值对的形式, 形式是?分隔, 键值对以&区分, 以上注解都无需添加, 会自动解析拼成, ajax函数中的请求参数未写时,也无需加,但是建议使用实例类对象形参接受解析, 拓展性更好

你可能感兴趣的:(Java,Web,Java开发工具,spring,boot,restful,后端,java,mvc,http)