likes
comments
collection
share

@RestController 业务案例场景

作者站长头像
站长
· 阅读数 57

@RestController注解,它用于指示类是一个控制器,并且该控制器中的所有方法返回的数据都直接作为 HTTP 响应的正文返回,通常用于构建 RESTful Web 服务。

注解设计结构

@RestController 业务案例场景

业务场景:

假设你正在开发一个电子商务平台的 REST API,该平台需要提供商品信息、用户订单和支付信息等资源的访问接口。

1. 创建 REST 控制器:

import org.springframework.web.bind.annotation.*;
import org.springframework.http.ResponseEntity;

@RestController
@RequestMapping("/api")
public class ECommerceRestController {

    @GetMapping("/products/{productId}")
    public ResponseEntity<Product> getProduct(@PathVariable Long productId) {
        Product product = productService.findById(productId);
        if (product != null) {
            return ResponseEntity.ok(product);
        } else {
            return ResponseEntity.notFound().build();
        }
    }

    @PostMapping("/orders")
    public Order createOrder(@RequestBody Order order) {
        return orderService.createOrder(order);
    }

    // 其他 CRUD 操作...
}

在这个控制器中,@RestController 注解确保了所有方法的返回值都直接作为 HTTP 响应正文返回。@GetMapping@PostMapping 是用于处理 HTTP GET 和 POST 请求的注解。

2. 服务层实现:

@Service
public class ProductService {

    public Product findById(Long id) {
        // 根据 ID 查找产品
        return productRepository.findById(id).orElse(null);
    }
}

@Service
public class OrderService {

    public Order createOrder(Order order) {
        // 创建订单逻辑
        return orderRepository.save(order);
    }
}

3. 异常处理:

@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(ProductNotFoundException.class)
    public ResponseEntity<?> handleProductNotFoundException(ProductNotFoundException ex) {
        return ResponseEntity.notFound().build();
    }

    // 可以添加更多的异常处理方法
}

4. 测试 API:

  • 客户端通过发送 GET 请求到 /api/products/{productId} 来获取商品详情。
  • 如果商品存在,客户端将收到一个包含商品信息的 JSON 响应。
  • 如果商品不存在,客户端将收到一个 404 状态码的响应。

总结:

  • @RestController 注解允许开发者创建简洁的 RESTful API,所有方法的返回值都自动序列化为 JSON 或 XML 响应正文。
  • 它非常适合用于构建 RESTful Web 服务,因为它减少了样板代码,并使得控制器专注于业务逻辑。
  • 使用 @RestController 注解可以提高开发效率,因为它自动处理了数据的序列化和响应构建。
转载自:https://juejin.cn/post/7383054105612599305
评论
请登录