java 如何为相似端点命名REST资源(findById / findByEmail)?

zbq4xfa0  于 2023-03-28  发布在  Java
关注(0)|答案(2)|浏览(144)

我有2个端点,如下所示,但我不能像这样使用端点URL:

@GetMapping("/{email}")
public ResponseEntity<Void> findByEmail(@PathVariable String email) {
}
@GetMapping("/{id}")
public ResponseEntity<Void> findById(@PathVariable long id) {
}

我应该使用类似@GetMapping("mail/{email}")的东西吗?

rslzwgfq

rslzwgfq1#

是的,为每个端点使用不同的路径是避免冲突的好方法。您可以为每个端点使用具有唯一路径的@GetMapping注解,例如@GetMapping(“/email/{email}”)用于findByEmail方法,@GetMapping(“/id/{id}”)用于findById方法。
因此,当请求作为URL /{email}或/{id}传入时,Spring框架可以根据不同的路径值区分这两个端点。

lsmepo6l

lsmepo6l2#

例如,如果您要通过电子邮件或ID检索用户,则可以使用以下资源名称:

**/users/{id}通过ID检索用户/users?email={email}**通过电子邮件检索用户这种方法使资源名称更具描述性,更容易理解。此外,它遵循使用名词(在本例中为“users”)命名资源的REST风格约定。

因此,您可以使用@GetMapping("/users/{id}")@GetMapping("/users"),并为相应的端点提供一个类似?email={email}的查询参数,以分别通过ID和电子邮件检索用户。
或者,您可以使用@GetMapping("/users/id/{id}")@GetMapping("/users/email/{email}")来区分端点。

相关问题