【问题标题】:Chain of REST path in spring boot controllerSpring Boot 控制器中的 REST 路径链
【发布时间】:2018-08-05 18:44:00
【问题描述】:

我使用 Spring Boot 开发 RESTful 后端应用程序。我发现了如何在课堂上使用注释:

@RestController
@RequestMapping(path = "/users")
public class User{
    // rest of code!
}

但是每个用户都有订单,任何订单都有商品!所以我设计了这样的rest API:

/users /users/{user_id}
/users/{user_id}/orders
/users/{user_id}/orders/{order_id}
/users/{user_id}/orders/{order_id}/items
/users/{user_id}/orders/{order_id}/items/{item_id}
/users/{user_id}/cart

现在,这个设计在 Spring Boot 中的最佳实践或正常实现是什么?如何使用 Spring Boot 处理 API?

【问题讨论】:

    标签: java spring rest spring-boot jakarta-ee


    【解决方案1】:

    继续使用类中的注解方法:

    @RestController
    @RequestMapping(path = "/users")
    public class UserController {
    
        @GetMapping("/{user_id}")
        public User getUserById(@PathVariable("user_id") String userId) { }
    
        @GetMapping("/{user_id}/orders")
        public List<Order> getOrdersByUserId(@PathVariable("user_id") String userId) { }
    
         @GetMapping("/{user_id}/orders/{order_id}")
        public List<Order> getOrdersByIdAndUserId(@PathVariable("user_id") String userId, @PathVariable("order_id") String orderId) { }
    
        // ... and so on
    }
    
    • 不要忘记{} 括号内的实现。
    • 示例方法getOrdersByIdAndUserId 映射到路径/users/{user_id}/orders/{order_id}GET 方法,其中/users 是定义为类映射的公共部分,其余部分与方法一起定义。
    • 我建议您将类User 重命名为UserController,因为User 是返回实体的合适名称。

    【讨论】:

    • 一个愚蠢的问题:我可以使用订单控制器吗?我知道这不合逻辑,他们有不同的业务,但我的思想参与其中。
    • 没有问题是愚蠢的。这取决于/users/{user_id}/orders/{order_id} 是否会返回与/orders/{order_id} 相同的结果——order_id 是用户订单的编号还是所有订单的编号。一般来说,我不建议从另一个控制器调用一个控制器。
    猜你喜欢
    • 1970-01-01
    • 2021-09-16
    • 1970-01-01
    • 2016-09-18
    • 2020-01-24
    • 2017-04-09
    • 2020-09-26
    • 2021-03-23
    • 1970-01-01
    相关资源
    最近更新 更多