@PathVariable、@RequestParam、@RequestBody三者使用

1、@PathVariable使用

@PathVariable 映射 URL 绑定的占位符(只能占一个参数),Spring3.0 新增的功能,通过 @PathVariable 可以将 URL 中占位符参数绑定到控制器(后端controller层的)处理方法的接收参中。

URL 中的 {xxx} 占位符可以通过@PathVariable(“xxx“) 绑定到(后端controller层中的)操作方法的接收参数中。

主要是根据请求方法进行类的区别(请求url相同,方式不同):

举例:

1、根据城市Id查询城市,

    @GetMapping(value = "/api/city/{id}")
    public City findCity(@PathVariable("id") int id) {
    
    
        return cityService.findCityById(id);
    }

前端访问此接口url:

http://localhost:8080/api/city/需要查询城市的id

2、根据城市Id删除城市

// 前端访问此接口url:
// http://localhost:8080/api/city/需要删除城市的id
@DeleteMapping(value = "/api/city/{id}")
    public int modifyCity(@PathVariable("id") int id) {
    
    
        return cityService.deleteCity(id);
    }

REST支持 GET、POST、PUT、DELETE请求方式:

示例: 
- /api/city/1 HTTP GET :  得到 id = 1 的城市信息  
- /api/city/1 HTTP DELETE:删除 id = 1 的城市信息  
- /api/city/1 HTTP PUT:   更新 id = 1 的城市信息 
- /api/city/  HTTP POST:  新增城市信息 

具体代码如下:

@RestController
public class CityController {
    
    
    @Autowired
    private CityService cityService;

    //根据id查询城市信息
    @GetMapping(value = "/api/city/{id}")
    public City findOneCity(@PathVariable("id") int id) {
    
    
        return cityService.findCityById(id);
    }
      
    //根据id删除城市信息
    @DeleteMapping(value = "/api/city/{id}")
    public int modifyCity(@PathVariable("id") int id) {
    
    
        return cityService.deleteCity(id);
    }
    
    //查询所有城市信息
    @GetMapping(value = "/api/city")
    public List<City> findAllCity() {
    
    
        return cityService.findAllCity();
    }

    //添加城市信息
    @PostMapping(value = "/api/city")
    public int createCity(@RequestBody City city) {
    
    
        return cityService.saveCity(city);
    }
    
    //修改城市信息
    @PutMapping(value = "/api/city")
    public int modifyCity(@RequestBody City city) {
    
    
       return cityService.updateCity(city);
    }
}

2、@RequestParam使用(请求体或url后获取数据)

@RequestParam有三个配置参数:

  1. required 表示是否必须,默认为 true(可省略不写)。
  2. defaultValue 可设置请求参数的默认值(可省略不写)。
  3. value 为接收url的参数名(一般与接收参数名相同)。

使用如下代码所示

 @GetMapping("/user/login/")
    public ResponseData UserLogin(@RequestParam(value = "username",required = true,defaultValue = "zhangsan") String username,@RequestParam(value = "pwd",required = true,defaultValue = "123456") String pwd) {
    
    
       //业务代码省略
    }

@RequestParam 用来处理 Content-Typeapplication/x-www-form-urlencoded 编码的内容,Content-Type默认为该属性。

@RequestParam 可用于其它类型的请求,例如:POST、DELETE等请求。

@RequestParam 可以接受简单类型的属性,如下图所示。

缺点:不支持批量发送数据(比如不能发送集合对象)
在这里插入图片描述

3、@RequestBody使用(请求体中获取数据)

一般用于接收前端发送来的 json、xml格式的数据,也就是 application/json、application/xml等类型的数据。

单个对象:

前端发送 json 数据:
在这里插入图片描述
后端使用对象接收:

 @PostMapping("/user/userLogin")
    public String userLogin(@RequestBody User user) {
    
    
        System.out.println(user);
        return user.toString();
    }

多个对象:

前端发送 json 数据:
在这里插入图片描述
后端使用(对象)集合接收:

  @PostMapping("/user/userLogin")
    public String userLogin(@RequestBody List<User> users) {
    
    
        System.out.println(users);
        users.forEach((user)->{
    
    
            System.out.println(user);
        });
        return "测试";
    }

结果如下:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43605266/article/details/114991039