Не могу разобраться со Spring REST

Возникло следующее недопонимание. Допустим, у нас есть сущность Film, с которой мы взаимодействуем через Rest Controller. И допустим мы выбираем ей маппинг "/films". Здесь в принципе все очевидно, что запрос на просто /films будет возвращать список всех фильмов, /films/1 будет возвращать первый и так далее с остальными HTTP операциями. То есть нам надо просто сделать простейший запрос к БД и получить данные. В этой ситуации я просто передаю полученный id в сервис, он его в репозиторий и методом по типу findOne()получаю данные. Но! Что будет если мы например захотим класть наши фильмы только в определенные группы. Например в сущность Group, у которой будет маппинг "/groups". Теперь получается, что для доступа к фильмам из определенной группы надо написать следующий запрос: /groups/1/films. Теперь получается, что данные так легко уже из БД получить не получится, потому что теперь нам надо будет выбирать именно те фильмы, у которых id группы соответствует тому, который указан в url'e. То есть теперь мне в репозитории придется создавать специальный метод, по типу findOneByIdAndGroupIdEquals().В этом и заключается моя проблема. Мы так можем усложнять "вложенность" до бесконечности. Например, если мы захотим создать вкладку 'избранное' у пользователя, то запрос может выглядеть вообще как-то так: users/username/favorites/1/groups/2/films/3. В итоге я просто ума не приложу, каким образом я должен сформировать запрос к базе данных, чтобы получить именно такую выборку? Все действительно так плохо или это я просто что-то делаю неправильно?


Ответы (1 шт):

Автор решения: Anton

Можно как вариант создать один endpoint /films и передавать через параметры запроса те поля, по которым фильтруем: http://.../films?group=3&director=Jarmush

@GetMapping("/films")

public List<Film> getFilms(@RequestParam Map<String, String> headers){
        
        return FilmService.find(headers.get("group"), headers.get("director")
   }
→ Ссылка