java—在类上使用annotation@requestmapping被认为是一种好的实践吗?

pvcm50d1  于 2021-07-12  发布在  Java
关注(0)|答案(1)|浏览(208)

假设我们要编写一个用于处理用户的控制器,它有三个端点: /users /users/{id} /users/{id}/friends .
我们可以通过两种方式定义方法的uri路径:
拆分到基路径和特定路径,并在类上放置注解( /users )在方法上(```。 /{id} 以及 /{id}/friends ).

@RestController
@RequestMapping("/users")
public class UsersController {
    @GetMapping
    public Collection<User> findAll() {
        ...
    }

    @GetMapping("/{id}")
    public User findById(@PathVariable long id) {
        ...
    }

    @GetMapping("/{id}/friends")
    public List<Friend>findFriendsOfUser(@PathVariable long id) {
        ...
    }
}

定义方法上的所有路径( /users , /users/{id} 以及 /users/{id}/friends ).

@RestController
public class UsersController {
    @GetMapping("/users")
    public Collection<User> findAll() {
        ...
    }

    @GetMapping("/users/{id}")
    public User findById(@PathVariable long id) {
        ...
    }

    @GetMapping("/users/{id}/friends")
    public List<Friend>findFriendsOfUser(@PathVariable long id) {
        ...
    }
}

两种方法可能有哪些优点和缺点?哪一个被社会所接受?

问题的动机

我坚信第二种选择更好,因为它更容易阅读和研究代码,因为我们可以在一个地方看到整个路径。而且,如果您知道所需方法的路径,就更容易找到它。

wbrvyc0a

wbrvyc0a1#

如果您不需要jax-rs或mvc问题的答案,您应该删除该部分,下次请尝试问一个特定的问题(这些是社区指南)。至于您是否应该拆分端点,如果您的控制器只与一个复数形式的特定模型(例如,用户)一起工作,那么您肯定应该为简短而拆分。但不要把复数和单数混用/users代表用户,/user{id}代表用户。幸运的是,rest并不特定于spring,您可以阅读许多文章中的一篇。

相关问题