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框架,可以让我们的开发效率更加高效。

评论关闭