Весенний загрузочный ресурс в виде ссылок

Я новичок в весенней загрузке, я использовал его для реализации 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 или другой дизайн для получения ссылок вместо полных объектов.

1
0
329
1

Ответы 1

Самое простое, что вы можете сделать, - это вернуть родительский и дочерний идентификаторы вместо объектов 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);

Позвольте вашему потребителю захватить родительские / дочерние идентификаторы и сделать отдельные вызовы REST


В качестве альтернативы вы можете использовать Spring-HATEOAS

The Spring HATEOAS project is a library of APIs that we can use to easily create REST representations that follow the principle of HATEOAS (Hypertext as the Engine of Application State).

Generally speaking, the principle implies that the API should guide the client through the through the application by returning relevant information about the next potential steps, along with each response.

Дополнительная информация Здесь

Другие вопросы по теме