SpringBoot Get方式请求传参用法介绍
SpringBoot Get方式请求传参用法介绍
本文将从以下多个方面对SpringBoot Get方式请求传参做详细的阐述,包括URL传参、路径传参、请求头传参、请求体传参等,帮助读者更加深入地了解Get请求方式下传参的相关知识。
一、URL传参
在Get请求方式中,URL传参是最为常见的一种方式,可以通过URL中添加参数的方式进行传递。例如:
http://localhost:8080/user?id=123&name=张三
在Controller中通过@RequestParam注解接收参数:
@RestController public class UserController { @GetMapping("/user") public String getUser(@RequestParam("id") Integer id, @RequestParam("name") String name) { return "id: " + id + ", name: " + name; } }
通过@RequestParam注解可以指定参数的名称,如果未指定,则默认使用参数名作为名称,例如上面的name参数。
如果参数为非必选参数,可以使用required属性将其设置为非必选参数:
@GetMapping("/user") public String getUser(@RequestParam(value = "id", required = false) Integer id, @RequestParam(value = "name", required = false) String name) { return "id: " + id + ", name: " + name; }
此时如果请求中不带有id或者name参数,也不会抛出异常。
二、路径传参
除了URL传参外,Get请求方式还可以通过路径进行参数传递,通常用于RESTful API中:
http://localhost:8080/user/123
在Controller中通过@PathVariable注解接收参数:
@RestController public class UserController { @GetMapping("/user/{id}") public String getUserById(@PathVariable("id") Integer id) { return "id: " + id; } }
通过@PathVariable注解可以将路径中的参数获取到,并作为方法的参数使用。
如果路径中有多个参数需要传递,可以按照以下方式进行定义:
@RestController public class UserController { @GetMapping("/user/{id}/name/{name}") public String getUserByIdAndName(@PathVariable("id") Integer id, @PathVariable("name") String name) { return "id: " + id + ", name: " + name; } }
三、请求头传参
在Get请求方式中,除了URL和路径传参外,还可以通过请求头进行参数传递,可以增加信息的安全性和隐私性。例如:
http://localhost:8080/user X-Token: abc X-User-Id: 12345
在Controller中通过@RequestHeader注解接收参数:
@RestController public class UserController { @GetMapping("/user") public String getUser(@RequestHeader("X-Token") String token, @RequestHeader("X-User-Id") Integer userId) { return "token: " + token + ", userId: " + userId; } }
通过@RequestHeader注解可以获取请求头中指定的参数,并作为方法的参数使用。
四、请求体传参
除了以上三种传参方式,还可以在Get请求方式中使用请求体进行参数传递。但是需要特别注意,Get请求方式中,并不是所有的浏览器都支持请求体传参。这种方式一般用于前端使用ajax等技术进行请求,在后端Controller中通过@RequestBody注解接收参数。
$.ajax({ url: "/user", type: "GET", contentType: "application/json", data: JSON.Stringify({id: 123, name: "张三"}), success: function(result){ console.log(result); } });
在Controller中通过@RequestBody注解接收参数:
@RestController public class UserController { @GetMapping("/user") public String getUser(@RequestBody User user) { return "id: " + user.getId() + ", name: " + user.getName(); } }
需要注意的是,由于Get请求并不是通过请求体进行传参的标准方式,因此需要使用contentType指定请求类型为application/json,同时在请求数据中需要将参数序列化为JSON字符串。
代码示例:1、URL传参
@RestController public class UserController { @GetMapping("/user") public String getUser(@RequestParam("id") Integer id, @RequestParam("name") String name) { return "id: " + id + ", name: " + name; } }
2、路径传参
@RestController public class UserController { @GetMapping("/user/{id}") public String getUserById(@PathVariable("id") Integer id) { return "id: " + id; } }
3、请求头传参
@RestController public class UserController { @GetMapping("/user") public String getUser(@RequestHeader("X-Token") String token, @RequestHeader("X-User-Id") Integer userId) { return "token: " + token + ", userId: " + userId; } }
4、请求体传参
前端发送请求:$.ajax({ url: "/user", type: "GET", contentType: "application/json", data: JSON.Stringify({id: 123, name: "张三"}), success: function(result){ console.log(result); } });在Controller中使用@RequestBody注解接收参数:
@RestController public class UserController { @GetMapping("/user") public String getUser(@RequestBody User user) { return "id: " + user.getId() + ", name: " + user.getName(); } }
以上为四种Get请求方式下的参数传递方式,开发者可以根据具体业务场景进行选择,更加深入的了解和使用SpringBoot框架,可以让我们的开发效率更加高效。
评论关闭