@RequestBody 商品json信息提交+6种案例介绍

155 篇文章 0 订阅
87 篇文章 0 订阅

@RequestBody 注解用于将 HTTP 请求的正文(body)绑定到控制器方法的参数上的注解。这种绑定通常用于处理 JSON、XML 或其他格式的请求数据,广泛应用于 RESTful API 开发中。

肖哥弹架构 跟大家“弹弹” SpringBoot源码,需要代码关注

欢迎 点赞,点赞,点赞。

关注公号Solomon肖哥弹架构获取更多精彩内容

注解结构设计

image.png

业务场景:

开发一个电子商务平台的 REST API,允许商家通过 API 提交商品信息。商家需要发送包含商品名称、描述、价格和库存数量的 JSON 数据。

1. API Endpoint 设计:
POST /api/products
2. 控制器方法使用 @RequestBody 注解:
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.http.ResponseEntity;

@RestController
public class ProductController {

    @PostMapping("/api/products")
    public ResponseEntity<Product> createProduct(@RequestBody Product product) {
        // 将接收到的商品信息保存到数据库
        productService.create(product);
        
        // 返回响应状态码 201(Created)和新创建的商品资源
        return ResponseEntity.status(HttpStatus.CREATED).body(product);
    }
}

在这个控制器中,@RequestBody 注解用于将请求的 JSON 正文绑定到 Product 对象。createProduct 方法接收这个对象,并调用服务层的 create 方法将商品保存到数据库。

3. 服务层实现:
import org.springframework.stereotype.Service;

@Service
public class ProductService {

    public void create(Product product) {
        // 将商品信息保存到数据库
        // 这里可以包括验证、计算逻辑等
        productRepository.save(product);
    }
}
4. 客户端请求:

客户端通过发送 POST 请求来提交商品信息:

POST /api/products
Content-Type: application/json

{
    "name": "Sample Product",
    "description": "This is a sample product for the store.",
    "price": 19.99,
    "stockQuantity": 100
}
5. 响应:

服务器接收请求,解析 JSON 数据,并将其绑定到 Product 对象。然后,调用业务逻辑将商品保存到数据库,并返回响应,告知客户端商品已成功创建。

其他案例介绍

1. RESTful API 请求处理

开发 RESTful API 时,经常需要接收 JSON、XML 或其他格式的数据,然后根据这些数据执行业务逻辑。

@PostMapping("/api/users")
public ResponseEntity<User> createUser(@RequestBody User user) {
    userService.save(user);
    return ResponseEntity.ok().build();
}

在这个场景中,客户端发送一个包含用户信息的 JSON 请求体,服务器使用 @RequestBody 注解将 JSON 映射为 User 对象。

2. 文件上传

在文件上传的场景中,可以使用 @RequestBody 来接收上传的文件内容。

@PostMapping("/api/upload")
public String handleFileUpload(@RequestBody MultipartFile file) {
    String fileName = file.getOriginalFilename();
    // 保存文件到服务器
    return "File uploaded successfully: " + fileName;
}
3. 接收复杂数据结构

当客户端需要发送复杂数据结构时,如嵌套对象或数组,@RequestBody 可以将这些复杂数据结构反序列化为相应的 Java 对象。

@PostMapping("/api/orders")
public Order createOrder(@RequestBody OrderRequest orderRequest) {
    // 处理复杂的订单请求数据
    return orderService.createOrder(orderRequest);
}
4. 跨域请求数据接收

在处理跨域请求时,@RequestBody 可用于读取预检请求(OPTIONS 请求)的正文内容,尽管这通常为空。

@PostMapping("/api/cors")
public ResponseEntity<String> handleCorsRequest(@RequestBody(required = false) String data) {
    // 处理跨域请求
    return ResponseEntity.ok("CORS request processed");
}
5. 异步请求处理

在使用 Spring WebFlux 进行异步请求处理时,@RequestBody 可用于从请求中读取异步数据流。

@PostMapping("/api/async")
public Mono<ResponseEntity<?>> handleAsyncRequest(@RequestBody Flux<Data> dataStream) {
    return dataStream
        .map(data -> processData(data))
        .collectList()
        .map(responseDataList -> ResponseEntity.ok(responseDataList));
}
6. 表单数据接收

尽管 @RequestBody 主要用于读取 JSON 或 XML 格式的数据,也可以配置 Spring 来解析表单提交的数据。

@PostMapping("/api/login")
public AuthenticationToken authenticateUser(@RequestBody LoginCredentials credentials) {
    // 验证用户凭据并生成令牌
    return authenticationService.authenticate(credentials);
}

注解属性说明:

@RequestBody 注解的属性说明:

  1. required:

    • 类型:boolean
    • 默认值:true
    • 作用:指示请求正文是否必须存在。如果设置为 true 且请求中没有正文内容,则会抛出异常。如果设置为 false,则在请求中没有正文时注入 null

总结:

  • @RequestBody 注解允许开发者接收和处理 HTTP 请求的正文数据。
  • 它支持复杂的数据结构,使得客户端可以发送结构化的数据(如对象或数组)。
  • 使用 @RequestBody 注解可以提高代码的可读性和可维护性,尤其是在处理复杂的请求数据时。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Solomon_肖哥弹架构

你的欣赏就是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值