Java应用接收到请求,获取请求参数。

按形式分类,纯粹的独立的情况,就三类
1、query传参
形如 GET api/notice?id=123
2、requestBody传参
形如 POST api/notice + requestBody
3、路径变量传参
形如 GET api/notice/{id}

(注意: 可以有组合使用的情况出现)

1、query传参
@GetMapping + @RequestParam 接收参数

假如后端接收到了一个这样的请求 GET api/productRank?type=fund

有下面这些方式可以获取请求中的type字段对应的参数(fund)

1.1
@GetMapping(value = "/productRank")
public void productRank(@RequestParam(value = "type") String type) {

System.out.println("type ->" + type);

}

1.2
@GetMapping("/productRank") // ←看这里 对比1.1
public void productRank(@RequestParam(value = "type") String type) {

System.out.println("type ->" + type);

}

1.3
@RequestMapping(value = "/list", method = RequestMethod.GET) // ←看这里 对比1.1
public void productRank(@RequestParam(value = "type") String type) {

System.out.println("type ->" + type);

}

说明:
a) 1.1 对比 1.2, 属性名为 value 时,可以省略书写 "value ="
b) 1.1 对比 1.3, @GetMapping 是基于 @RequestMapping 实现的,功能上没有本质区别,两个注解的作用完全等价。
c) 使用 @RequestParam(value = "type") String type 获取GET 请求中的 query 参数

2、requestBody传参
@PostMapping + @RequestBody 接收参数

假如后端接收到了一个这样的请求
POST api/add
requestBody = { id: 12, name: "Tom" }

有下面这些方式可以获取请求中的requestBody中的内容

2.1
@PostMapping(value = "/add")
public void add(@RequestBody User userRequest) {

System.out.println("Received User Info:");
System.out.println("name" + userRequest.getName());
System.out.println("id" + userRequest.getId());

}

2.2
@PostMapping("/add")
public void add(@RequestBody User userRequest) {

System.out.println("Received User Info:");
System.out.println("name" + userRequest.getName());
System.out.println("id" + userRequest.getId());

}

2.3
@RequestMapping(value = "/add", method = RequestMethod.POST)
public void add(@RequestBody User userRequest) {

System.out.println("Received User Info:");
System.out.println("name" + userRequest.getName());
System.out.println("id" + userRequest.getId());

}

说明就不写了,看过1的说明就理解这里2的不同之处。

3、路径变量传参
路径变量传参通过@PathVariable,获取URL模板中的变量形参对应的值
路径变量传参在GET,POST请求中我都见过,对POST请求的大部分情况,只用 @RequestBody 就可以了 路径参数信息也可以放到 requestBody中。

3.1
@GetMapping("/collection/delete/{id}")
public void deleteCollection(@PathVariable Integer id) {

System.out.println("id->" + id);

}

3.2 (举例用,开发的时候不推荐, 因为可以把id信息放到requestBody里一起获取)
// POST请求,使用 @PostMapping 接收路径参数 并与 @RequestBody 中获取到的requestBody内容搭配使用
@PostMapping("/update/{id}")
public void updateUser(@PathVariable Integer id, @RequestBody User userRequest) {

System.out.println("Updating User ID: " + id);
System.out.println("New Name: " + userRequest.getName());

}

同步更新到自己的语雀
https://www.yuque.com/dirackeeko/wxkg90/wzt5zfn04aeg56vf


DiracKeeko
125 声望2 粉丝