Spring RestController 捕获所有 RequestMapping 并继续到正确的端点

Spring RestController catch all RequestMapping and continue to the correct endpoint

假设我有一个 @RestController 如下所示:

@RestController
@RequestMapping("/1st")
public class MyController {
    @GetMapping("/2nd/aaa")
    public void getAaa() {
        ...
    }

    @GetMapping("/2nd/bbb")
    public void getBbb() {
        ...
    }
}

我想添加方法来捕获所有具有基本路径“/1st”和“/1st/2nd”之间的请求,然后继续到正确的端点。我尝试添加:

@GetMapping("/**")
public void doThisFirst() {
    ...
}

但这没有用,对“/1st/2nd/bbb”的请求仍然只落在方法 getBbb() 上。请帮忙,谢谢。

I want to add methods to catch all requests with the base path "/1st" and "/1st/2nd" in between and then continue to the correct endpoint. I tried adding:

@GetMapping("/**") public void doThisFirst() { ... }

可能您想在执行每个端点具有的相关代码之前执行一些额外的代码(doThisFirst 中的代码)。

这里有2个解决方案。

A) 您使用 @Before 定义一个方面,它将在您的最终端点具有的代码之前执行。这是一些 example code

B) 您定义了一个拦截器,它只会在这两个端点之前执行。在这里检查一些

拦截器或方面应包含您在 doThisFirst() 中的代码,并且您希望在到达实际端点之前执行。

在任何情况下,此起始代码都不应位于控制器内,因此您可以从控制器中删除 @GetMapping("/**")

您正在寻找的功能称为过滤器。过滤器捕获所有传入的请求,执行一些操作,并将其传递到正确的端点。他们还在端点发送响应后捕获传出信息。这是一篇解释如何编写和配置过滤器的文章:How to Define a Spring Boot Filter?