Spring RequestMapping Controller注解并在同一个Controller中创建不同的绝对路径

Spring RequestMapping Controller annotation and create a different absolute path inside the same Controller

从Restful Apis的角度来看,当你的数据库也是分层的时候,它说将它们设计成分层是一个很好的选择,最重要的是因为客户端学习并知道实体的层次结构。我的意思是,例如,如果您有银行客户和账户,则父实体就是客户,子实体就是账户。所以:

从 Spring 控制器的角度来看,我应该有一个 ClientController 和一个 AccountController 但是

  1. AccountController 应该处理上面的请求吧?

  2. 我可以指定像“accounts/?clientId=1”这样的 URI 吗?这是一个糟糕的设计?

  3. 如果我选择选项 1,如何在 AccountsController 中指定此 URI?如果不是,我是否应该为此创建另一个控制器而不是将此 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(){}
    
    
     }
    

谢谢!!

没有硬性约束规则,选择和用例决定了我们如何构造我们的 rest uris,使用查询参数或路径变量是为了构建有意义且可读的 uris。

假设如果您 have.usecase 想要获取帐户列表,则需要客户 ID 作为强制性要求,然后构造:

获取/客户/{id}/账户 并将其放入客户端控制器中。

但是,如果您的用例类似于客户 ID 不是获取帐户列表的强制性条件,则构造: GET /accounts?clientid=1 并将其放入帐户控制器中。现在你可以选择让 clientid 为 required=false 请求参数。

不要构建深度嵌套的 API。最终您将面临需要创建非嵌套 uris 的用例。