Java 在类上使用注释@RequestMapping是否被认为是一种良好的做法?

Java 在类上使用注释@RequestMapping是否被认为是一种良好的做法?,java,spring,rest,spring-restcontroller,Java,Spring,Rest,Spring Restcontroller,假设我们想编写一个与用户一起工作的控制器,它有三个端点: /users /users/{id} /users/{id}/friends 我们可以通过两种方式定义该方法的URI路径: 拆分到基本路径和特定路径,并在类(/users)和方法(`./{id}和/{id}/friends)上放置注释 @RestController @请求映射(“/users”) 公共类用户控制器{ @GetMapping 公共集合findAll(){ ... } @GetMapping(“/{id}”) 公共用户f

假设我们想编写一个与用户一起工作的控制器,它有三个端点:

  • /users
  • /users/{id}
  • /users/{id}/friends
我们可以通过两种方式定义该方法的URI路径:

  • 拆分到基本路径和特定路径,并在类(
    /users
    )和方法(`.
    /{id}
    /{id}/friends
    )上放置注释
  • @RestController
    @请求映射(“/users”)
    公共类用户控制器{
    @GetMapping
    公共集合findAll(){
    ...
    }
    @GetMapping(“/{id}”)
    公共用户findById(@PathVariable long id){
    ...
    }
    @GetMapping(“/{id}/friends”)
    public ListfindFriendsOfUser(@PathVariable long id){
    ...
    }
    }
    
  • 定义方法上的所有路径(
    /users
    /users/{id}
    /users/{id}/friends
  • @RestController
    公共类用户控制器{
    @GetMapping(“/users”)
    公共集合findAll(){
    ...
    }
    @GetMapping(“/users/{id}”)
    公共用户findById(@PathVariable long id){
    ...
    }
    @GetMapping(“/users/{id}/friends”)
    public ListfindFriendsOfUser(@PathVariable long id){
    ...
    }
    }
    
    这两种方法可能有哪些优点和缺点?哪一个被社会所接受

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

    如果您不需要JAX-RS或MVC问题的答案,您应该删除该部分,下次请尝试问一个特定的问题(这些是社区指南)。至于是否应该拆分端点,如果控制器只使用一个特定型号的复数形式(例如,用户),则绝对应该拆分端点。但是不要混用复数和单数/users对于用户/user{id}对于用户。幸运的是,REST不是spring特有的,您可以阅读其中的一个。

    @Path
    @RequestMapping
    属于两个完全不同、不兼容的框架;前者用于JAX-RS,后者用于Spring MVC。如果您的应用程序中同时包含了这两个选项,并且认为可以同时使用这两个选项,那么您就需要花很长的时间来找出为什么事情不能按预期工作。谢谢您的回答!但这与问题无关。是的,很明显注释属于不同的框架。如果这使问题更简单,我可以从问题中删除JAX-RS示例。无论如何,谢谢!不管框架如何,元数据都将用于将请求映射到给定的对象和方法,应该通过询问其中一个框架来改进这个问题。还请记住,不同的框架有自己独特的方法来处理此类用例。由于注释是预编译的,所以在java中不会有太大的区别,但确实存在动态类型的运行时,根据编译器的工作方式,它可能会影响性能。