【问题标题】:spring boot resource as linksspring boot 资源作为链接
【发布时间】:2019-03-22 14:47:35
【问题描述】:

我是 Spring Boot 的新手,我用它来实现一个 Rest API。我有一个自引用表,其中每个项目都有一个父树结构。我已经使用 ManyToOne 来实现它,并且我得到了一个包含父对象的 json 对象。如果我得到所有项目,速度会非常慢,因为存在巨大的网络延迟和处理,因为我的树最多可以容纳 10000 个项目。

我如何使用链接来表示它,即 json 对象包含到父链接的链接和到子链接的数组。我读过 DTO 可以用来实现这一点,但我没有找到完整的细节。

我的部分代码

 @Entity
    @Table(name = "Item", schema = "dbo")
    @Getter
    @Setter
    public class Item {
        @Id
        @GeneratedValue
        @Column()
        private Integer ItemID;
        @Column()
        private String Project;
        @Column()
        private String Name;
        @Column()
        private Integer Version; 
    @ManyToOne(fetch = FetchType.LAZY)
        @JoinColumn(name = "ParentItemID", insertable = false, updatable = false)
        private Item parentItem;

My controller is strait forward 

@Autowired
    ItemService ItemService;
    @RequestMapping ("/items")
    public Iterable<Item> items(@RequestParam(value = "page", defaultValue = "0") Integer page,
            @RequestParam(value = "size", defaultValue = "20") Integer size, Authentication auth) {
        return ItemService.findPaginated(page, size);
    }

如果我能得到更多关于如何使用 DTO 或其他设计来获取链接而不是完整对象的解释,我会很高兴。

【问题讨论】:

    标签: spring rest api spring-boot


    【解决方案1】:

    您可以做的最简单的事情是,返回父和子 id 而不是 Item 对象。

    @Entity
        @Table(name = "Item", schema = "dbo")
        public class Item {
           .
           .  
           private Integer ItemID;
           private Integer parentItem;
           .
           . 
    

    在您的控制器中有另一个端点,例如 /items/{itemId}

    @GetMapping("/items/{itemId}")
    public Item item(@PathVariable itemId, Authentication auth) {
      return ItemService.findById(itemId);
    

    让您的消费者获取父/子 ID 并进行单独的 REST 调用


    或者,您可以使用 Spring-HATEOAS

    Spring HATEOAS 项目是一个 API 库,我们可以使用它来 轻松创建遵循以下原则的 REST 表示 HATEOAS(超文本作为应用程序状态的引擎)。

    一般来说,原则意味着API应该引导 客户端通过应用程序返回相关 有关下一步可能采取的步骤的信息,以及每个响应。

    更多信息Here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-27
      • 2016-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多