【问题标题】:How to ignore level @RequestMapping() and direct call method level @RequestMapping()?如何忽略级别@RequestMapping()和直接调用方法级别@RequestMapping()?
【发布时间】:2016-09-21 07:11:31
【问题描述】:

如何在Spring中忽略类级别@RequestMapping("/home"),直接调用方法级别@RequestMapping("/users")?

@Controller
@RequestMapping("/home")

@RequestMapping("/method1")
public void method1(){
...
}

@RequestMapping("/users")
public void listUsers(){
...
}

我想调用http://localhost:8080/users来调用listUsers()方法。

【问题讨论】:

  • ../users 会起作用吗?我只是在考虑,但值得一试
  • 这不起作用。

标签: java spring rest spring-mvc request-mapping


【解决方案1】:

您不能绕过在类级别定义的请求映射。如果是这样,为什么你想要一个类级别的映射那么......你可以在方法级别的请求映射中做这样的事情

@Controller
@RequestMapping("/home/method1")
public void method1(){
...
}

@RequestMapping("/users")
public void listUsers(){
...
}

在这种情况下,你可以试试这个......

 @Controller
@RequestMapping({ "/home", "/users" })


    @RequestMapping("/method1")
    public void method1(){
    ...
    }

   @RequestMapping(method="RequestMethod.GET")
    public void listUsers(){
    ...
    }

【讨论】:

  • 我在这个 Controller 类中有各种其他方法,它们是遗留代码的一部分,我无法触及它,而我正在编写我的新端点,我不想调用类级别的 @RequestMapping我的方法。
  • 在我的回答中尝试更新的方法,让我知道它是否有效。我刚刚在类级别映射了多个请求映射,因此从您的方法中删除了一个,因为它不需要跨度>
  • 它如何知道它应该映射到哪一个?就像 /home/method1 用于 method1() 和 /users 用于 listUsers()。假设我有/users/(id},那怎么做精确映射呢?
  • params {} 不能在类级别映射,因为您可以通过在您的情况下再映射一个请求映射来处理它,我会将其设置为 /users/getUserById/{id}。所以现在我的 /users 保持在类级别,而 /getUserById/{id} 进入方法级别
【解决方案2】:

将@RequestMapping("/users") 更改为@RequestMapping(method=RequestMethod.GET)

【讨论】:

    【解决方案3】:

    据我了解,您期​​望的是类级 RequestMapping。 method-level RequestMapping 应该在 class-level 的路径下。

    我给你举几个例子:

    @RestController
    @RequestMapping("/home")
    public class HomeController {
        // Full path of following endpoint: /home/parents.
        @RequestMapping(value = "/parents", method = RequestMethod.GET)
        public ResponseEntity<List<People>> getParents() {
            return ResponseEntity.ok(methodToGetParents());
    }
    

    对于“用户”的路径,您应该在另一个类(控制器)中进行:

    @RestController
    @RequestMapping("/users")
    public class UsersController {
        // Full path of following endpoint: /users.
        @RequestMapping(method = RequestMethod.GET)
        public ResponseEntity<List<People>> getUsers() {
            return ResponseEntity.ok(methodToGetUsers());
    }
    

    【讨论】:

    • 我在这个 Controller 类中有各种其他方法,它们是遗留代码的一部分,我无法触及它,在我编写新端点时,我不想调用类级别的 @RequestMapping我的方法。
    • @user2340345 如果您尝试在“/users”端点中使用一些 HomeController 的方法,我认为这些方法写在错误的地方。因为据我了解,控制器类不应该包含太多的逻辑代码。这些方法应该移到服务类中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-23
    • 1970-01-01
    • 2021-12-12
    • 2019-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多