Spring RequestMapping Controller注解并在同一个Controller中创建不同的绝对路径
Spring RequestMapping Controller annotation and create a different absolute path inside the same Controller
从Restful Apis的角度来看,当你的数据库也是分层的时候,它说将它们设计成分层是一个很好的选择,最重要的是因为客户端学习并知道实体的层次结构。我的意思是,例如,如果您有银行客户和账户,则父实体就是客户,子实体就是账户。所以:
- 要从客户端 1 获取帐户,正确的 URI 可能类似于“/clients/1/accounts”
从 Spring 控制器的角度来看,我应该有一个 ClientController 和一个 AccountController 但是
AccountController 应该处理上面的请求吧?
我可以指定像“accounts/?clientId=1”这样的 URI 吗?这是一个糟糕的设计?
如果我选择选项 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 的用例。
从Restful Apis的角度来看,当你的数据库也是分层的时候,它说将它们设计成分层是一个很好的选择,最重要的是因为客户端学习并知道实体的层次结构。我的意思是,例如,如果您有银行客户和账户,则父实体就是客户,子实体就是账户。所以:
- 要从客户端 1 获取帐户,正确的 URI 可能类似于“/clients/1/accounts”
从 Spring 控制器的角度来看,我应该有一个 ClientController 和一个 AccountController 但是
AccountController 应该处理上面的请求吧?
我可以指定像“accounts/?clientId=1”这样的 URI 吗?这是一个糟糕的设计?
如果我选择选项 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 的用例。