当前位置:   article > 正文

@RequestParam、@RequestBody、@RequestAttribute、@RequestPart和@PathVariable详解和具体示例

@requestpart

目录

1. @RequestParam

常规用法

@PathVariable注解

可选参数

2. @RequestBody

常规用法

JSON格式数据

3. @RequestAttribute

4. @RequestPart

常规用法

上传多个文件

总结:


在使用Spring Web框架开发Web应用时,我们通常需要获取请求的参数、请求体、请求属性等信息。为了方便地提取这些信息,Spring Web提供了多个注解,包括@RequestParam@RequestBody@RequestAttribute@RequestPart等。

在本篇博客中,我们将介绍这些注解的用法,并提供具体示例。

1. @RequestParam

@RequestParam注解用于获取HTTP请求参数的值。

可以通过name、value、required、defaultValue等属性来指定参数名、是否必须、默认值等信息。如果请求参数名和方法参数名不一致,可以通过设置@RequestParam的value属性来解决。

示例代码如下:

常规用法

  1. @Controller
  2. @RequestMapping("/user")
  3. public class UserController {
  4. @GetMapping("/info")
  5. public String userInfo(@RequestParam("user_id") int userId) {
  6. //处理业务逻辑
  7. return "user_info";
  8. }
  9. }

上述代码中,@RequestParam注解获取了前端页面提交的参数名为user_id的值,并赋值给方法参数userId。

@PathVariable注解

如果请求参数和方法参数名称相同,可以省略value属性。

  1. @GetMapping("/users/{id}")
  2. public User getUserById(@PathVariable Long id, @RequestParam String name) {
  3. return userService.getUserByIdAndName(id, name);
  4. }

在这个示例中,我们使用@PathVariable注解将URL路径参数id映射到方法参数id上,并使用@RequestParam注解将请求参数name映射到方法参数name上。

可选参数

有时候,请求参数可能不是必须的。为了避免抛出异常,我们可以设置required属性为false

  1. @GetMapping("/users")
  2. public List<User> getUsers(@RequestParam(required = false) String name) {
  3. if (name == null) {
  4. return userService.getAllUsers();
  5. } else {
  6. return userService.getUsersByName(name);
  7. }
  8. }

在这个示例中,我们使用@RequestParam注解将请求参数name映射到方法参数name上,并设置了required属性为false。如果请求参数不存在,则返回所有用户;否则返回指定名称的用户列表。

2. @RequestBody

@RequestBody注解用于获取HTTP请求的请求体中的内容,常用于处理POST请求。

使用该注解后,Spring会自动将请求体中的JSON/XML等数据封装成Java对象,方便进行操作。

示例代码如下:

常规用法

  1. @Controller
  2. @RequestMapping("/user")
  3. public class UserController {
  4. @PostMapping("/add")
  5. public String addUser(@RequestBody User user) {
  6. //处理业务逻辑
  7. return "add_success";
  8. }
  9. }

上述代码中,@RequestBody注解将请求体中的JSON/XML数据封装成了User对象,方便后续操作。

JSON格式数据

如果请求体是JSON格式的数据,我们可以使用@RestController注解和@PostMapping注解来自动转换为Java对象。

  1. @RestController
  2. public class UserController {
  3. @PostMapping("/users")
  4. public User createUser(@RequestBody CreateUserRequest request) {
  5. User user = new User(request.getName(), request.getAge());
  6. return userService.createUser(user);
  7. }
  8. }
  9. public class CreateUserRequest {
  10. private String name;
  11. private int age;
  12. // getters and setters
  13. }

在这个示例中,我们使用@RestController注解和@PostMapping注解来处理POST请求,并使用CreateUserRequest类来自动转换请求体为Java对象。

3. @RequestAttribute

@RequestAttribute注解用于获取HTTP请求中的属性值,通常由过滤器或拦截器在请求处理之前设置。

可以通过name属性来指定属性名。 示例代码如下:

  1. @Controller
  2. @RequestMapping("/user")
  3. public class UserController {
  4. @GetMapping("/info")
  5. public String userInfo(@RequestAttribute("user_name") String userName) {
  6. //处理业务逻辑
  7. return "user_info";
  8. }
  9. }

上述代码中,@RequestAttribute注解获取了请求中名为user_name的属性值,并赋值给方法参数userName。

4. @RequestPart

@RequestPart注解用于处理文件上传请求,可以直接将文件封装成Java对象。

在处理文件上传时,需要使用multipart/form-data编码方式,并且表单中的name值需要和@RequestPart注解中的value值一致。 示例代码如下:

常规用法

  1. @Controller
  2. @RequestMapping("/user")
  3. public class UserController {
  4. @PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
  5. public ResponseEntity<String> uploadFile(@RequestPart MultipartFile file, @RequestParam String description) {
  6. // 处理文件和参数
  7. }
  8. }

在这个示例中,我们使用@RequestPart注解将上传的文件映射到方法参数file上,使用@RequestParam注解将请求参数description映射到方法参数description上。这样,我们就可以上传文件并附带描述信息了。

上传多个文件

如果要上传多个文件,可以使用MultipartFile[]类型的参数。

  1. @PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
  2. public ResponseEntity<String> uploadFiles(@RequestPart("fileList") MultipartFile[] fileList, @RequestParam String description) {
  3. // 处理文件和参数
  4. }

在这个示例中,我们使用@RequestPart注解将多个上传的文件映射到方法参数fileList上。这样,我们就可以上传多个文件并附带描述信息了。

注意:使用@RequestPart注解时,必须同时指定Content-Typemultipart/form-data,否则会抛出异常。

总结:

以上就是@RequestParam、@RequestBody、@RequestAttribute、@RequestPart注解的详细解释和具体示例。它们可以极大地简化HTTP请求参数的获取和文件上传的操作。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/310099
推荐阅读
相关标签
  

闽ICP备14008679号