Spring Boot REST API: отображение (или нет) связанных сущностей в JSON

Я создаю приложение на основе Spring Boot для предоставления JSON REST API. В этом приложении у меня есть отношение «один ко многим»: один заказ имеет несколько элементов (и один элемент принадлежит ровно одному заказу). Я хотел бы иметь следующие 4 конечные точки API:

  • ПОЛУЧИТЬ все заказы: в этом случае мне нужен только сам заказ, поэтому исключая связанные элементы
  • ПОЛУЧИТЕ один Заказ: получите сам Заказ, включая связанные с ним Предметы
  • GET single Item: получить один элемент, включая заказ, которому он принадлежит (здесь не имеет значения, включен ли только идентификатор (= первичный ключ) заказа или весь заказ
  • ПОЛУЧИТЬ все предметы: все предметы; связанный Заказ не нужен - но это тоже не повредит.

К сожалению, я немного не понимаю, как моделировать свои ассоциации и / или методы контроллера, которые открывают конечные точки API. У тебя есть мне подсказки?

Большое спасибо!

ПОЛУЧИТЬ / заказы; GET / orders / {id} не забудьте сделать присоединение к выборке в службе (или fetchType.Eager); GET / items; ПОЛУЧИТЕ / orders / {id} / items, если Вы хотите иметь товары для определенного заказа; GET / items / {id} отдельный элемент;

Michal Cholewiński 28.03.2018 09:32
1
1
620
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Не уверен, что есть лучший способ сделать это, но мой подход заключался бы в моделировании и извлечении отношений с помощью Hibernate, но ленивым способом (https://howtoprogramwithjava.com/hibernate-eager-vs-lazy-fetch-type/).

В вашем контроллере вы возвращаете не объект, а класс DTO, который может быть очень похож на ваш объект. Этот DTO создается некоторым компонентом сопоставления, который обеспечивает логику включения или исключения связанных элементов и т. д.

Ответ принят как подходящий

Ваш первый выбор всегда должен заключаться в использовании шаблонов проектирования программного обеспечения. При разработке приложений, которые могут требовать удаленных подключений (или не требовать), есть одно, которое должно быть реализовано в вашем остальном api: Объект передачи данных.

Учитывая, что вы разрабатываете под Java / Spring Framework, вам следует взглянуть на библиотеку модельер и на это руководство.

Я успешно выполнил ту же задачу в своем rest api.

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