весенний загрузочный ресурс как ссылки - PullRequest
0 голосов
/ 17 октября 2018

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

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

потребитель получает идентификаторы parent / children и выполняет отдельные вызовы REST


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

Проект Spring HATEOAS - это библиотека API, которые мы можемиспользовать для простого создания REST-представлений, которые следуют принципу HATEOAS (гипертекст как движок состояния приложения).

В общем, принцип подразумевает, что API должен направлять клиента через сквозное приложение, возвращая соответствующую информациюо следующих возможных шагах, вместе с каждым ответом.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...