SpringBoot Controller参数接收全解析:@PathVariable, @RequestParam, @Requ...

24 下载量 97 浏览量 更新于2023-03-16 收藏 70KB PDF 举报
本文主要探讨了在SpringBoot的Controller中如何接收不同类型的参数,包括请求路径参数、查询参数以及请求体中的参数。 首先,我们来看请求路径参数。这类参数是通过URL路径直接传递的,通常与`@PathVariable`注解一起使用。例如,当URL为`http://localhost:8080/demo/123`时,`@PathVariable`可以捕获到路径中的`123`。在给定的示例中,`@GetMapping("/demo/{id}")`方法中的`@PathVariable(name="id") String id`就用来接收这个路径变量。这种方法适用于需要通过URL唯一标识资源的情况。 其次,查询参数是通过URL问号`?`后面传递的,如`http://localhost:8080/demo?name=suki_rong`。在SpringBoot中,我们可以使用`@RequestParam`注解来获取这些参数。示例代码展示了如何通过`@RequestParam(name="name") String name`获取名为`name`的查询参数。这种方法适合传递多个可选参数,或者参数不构成URL的一部分时使用。 接下来,我们转向请求体参数。在POST请求中,通常会将数据放在请求体中。SpringBoot提供了`@RequestBody`注解来处理这种情况。例如,当发送一个JSON对象`{"name":"suki_rong","age":18,"hobby":"programming"}`时,`@PostMapping(path="/demo1")`中的`@RequestBody Person person`将会自动将JSON转换为Person对象。如果请求体内容是简单的键值对,可以使用`Map<String, String>`来接收。这使得Controller能够处理各种类型的数据。 另外,如果请求体的数据结构与Java对象完全匹配,那么可以省略`@RequestBody`注解,直接在方法参数中声明对象类型。例如,`@PostMapping(path="/demo2")`的`demo2(Person person)`方法,SpringBoot会尝试将请求体自动转换为Person对象,这依赖于Jackson库或其他类似库来完成反序列化。 总结起来,SpringBoot的Controller可以通过`@PathVariable`、`@RequestParam`和`@RequestBody`等注解灵活地处理不同的参数来源。了解并熟练掌握这些接收参数的方式,有助于构建功能丰富的RESTful API服务,满足各种业务需求。在实际开发中,应根据具体情况选择最合适的参数接收方式,以实现高效且易于维护的代码。