Аннотации Spring RequestMapping Controller и создать другой абсолютный путь внутри того же контроллера - PullRequest
0 голосов
/ 21 июня 2020

С точки зрения Restful Apis, он сказал, что это хороший выбор для их иерархической разработки, когда ваша база данных тоже иерархическая, прежде всего потому, что клиент изучает и знает иерархическую структуру объектов. Я имею в виду, например, что если у вас есть клиенты и счета в банке, родительская сущность будет клиентами, а дочерние сущности - счетами. Итак:

  • Чтобы получить учетные записи от клиента 1, правильный URI может быть примерно таким: «/ clients / 1 / accounts»

С точки зрения контроллеров Spring , У меня должны быть ClientController и AccountController, но

  1. AccountController должен обрабатывать вышеуказанный запрос, верно?

  2. Могу ли я указать и URI как "accounts /? clientId = 1"? Это плохой дизайн?

  3. Если я go с опцией 1, как указать этот URI в AccountsController ?? Если нет, должен ли я создать другой контроллер только для этого и не помещать этот URI в контроллер учетной записи?

     @RequestMapping("/clients")
     public class ClientsController{ }
    
    
     @RequestMapping("/accounts")
     public class AccountsController{
    
        @RequestMapping("/clients/{idClient}/accounts") => **I cannot specify 
       an absolute path here because 
        its relative to the RequestMapping annotation in the Controller**
       @GetMapping   
        public @ResponseBody List<Account> getAccounts(){}
    
    
     }
    

Спасибо !!

1 Ответ

1 голос
/ 21 июня 2020

Нет жестких связанных правил, это вопрос выбора и вариантов использования, которые решают, как мы структурируем наши остальные uris, а использование параметров запроса или переменных пути предназначено для создания значимых и читаемых uris.

Предположим, если у вас есть. это похоже на то, чтобы получить список учетных записей, требующий идентификатора клиента как обязательного, затем создайте:

GET / clients / {id} / accounts и поместите его в контроллер клиентов.

Но если ваш вариант использования например, идентификатор клиента не является обязательным для получения списка учетных записей, затем создайте: GET / accounts? clientid = 1 и поместите его в контроллер учетных записей. Теперь вы можете сделать clientid as required = false request param.

Не создавайте глубоко вложенные API ... сделайте немые конечные точки, в конечном итоге вы столкнетесь с вариантами использования, в которых вам нужно будет создавать не вложенные uris .

...