What is `@RequestBody ` does?

26 篇文章 0 订阅
11 篇文章 0 订阅

@RequestBodySpringMVC框架中的注解,通常与POSTPUT等方法配合使用。当客户端发送包含JSON或XML格式数据的请求时,可以通过该注解将请求体内容绑定到Controller方法参数

作用

自动反序列化:
SpringMVC会根据@RequestBody注解的参数类型,利用Jackson库(默认配置下)或其他MessageConverter将HTTP请求体中的JSON或XML数据转换成对应的Java对象。

支持复杂数据结构:
可以轻松处理嵌套对象数组集合等复杂数据结构,将其映射为Java实体类自定义对象

使用样例

部份参数

# 对应请求示例(假设User类有username和password属性):
 POST /users HTTP/1.1
 Content-Type: application/json
 
 {
   "username": "john.doe",
   "password": "secret"
 }
 
@PostMapping("/users")
public User createUser(@RequestBody User user) {
    // 将请求体中的JSON或XML数据转换为User对象
    userService.save(user);
    return user;
}

接收并处理嵌套对象

# 对应请求示例:
 POST /users HTTP/1.1
 Content-Type: application/json
 
 {
   "username": "john.doe",
   "password": "secret",
   "address": {
     "street": "123 Main St.",
     "city": "Springfield"
   }
 }
 
@PostMapping("/users")
public User createUser(@RequestBody UserRequest userRequest) {
    User user = new User();
    user.setUsername(userRequest.getUsername());
    user.setPassword(userRequest.getPassword());
    user.setAddress(userRequest.getAddress());

    userService.save(user);
    return user;
}

public class Address {
    private String street;
    private String city;
    // getters and setters...
}

public class UserRequest {
    private String username;
    private String password;
    private Address address;
    // getters and setters...
}

处理数组或集合数据

# 对应请求示例(创建多个用户):
 POST /batch/users HTTP/1.1
 Content-Type: application/json
 
 [
   {
     "username": "user1",
     "password": "pass1"
   },
   {
     "username": "user2",
     "password": "pass2"
   }
 ]
 
@PostMapping("/batch/users")
public List<User> createUsers(@RequestBody List<UserRequest> userRequests) {
    List<User> users = new ArrayList<>();
    for (UserRequest request : userRequests) {
        User user = new User();
        // map request properties to user object...
        users.add(user);
    }

    userService.saveAll(users);
    return users;
}

使用 @RequestBody 和自定义JSON属性名映射

# 对应请求示例(使用与Java字段不同的JSON属性名):
 POST /users HTTP/1.1
 Content-Type: application/json
 
 {
   "user_name": "john.doe",
   "pwd": "secret"
 }
 
@PostMapping("/users")
public User createUser(@RequestBody UserRequest userRequest) {
    User user = new User();
    user.setUsername(userRequest.getUsername());
    user.setPassword(userRequest.getPassword());

    userService.save(user);
    return user;
}


public class UserRequest {
    @JsonProperty("user_name")
    private String username;
    @JsonProperty("pwd")
    private String password;
    // getters and setters...
}

  • 9
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值