【问题标题】:Catch all requested paths in Springboot RestController在 Spring Boot Rest Controller 中捕获所有请求路径
【发布时间】:2021-07-23 12:58:06
【问题描述】:

我正在寻找一种在 Springboot 中获取端点的方法,该端点可以捕获发送到 / 的所有请求。理想情况下,/ 后面的所有内容都应作为字符串参数提交。

示例请求可能如下所示:http://myproxy.com/foo/bar?blah=blubb 我为/ 尝试了一个 RestController

@RestController
public class ProxyRestController {

    @RequestMapping("/{restOfPath}", method = RequestMethod.GET)
    public ResponseEntity<String> handleGetRequests(@PathVarialbe("restOfPath") String path) {
        return ResponseEntity.of(Optional.of(""));
    }

}

端点没有捕获示例,因为它将被路由到 /foo/bar/foo 被捕获。

如何在 SpringBoot 中实现“包罗万象”端点?它也可以是@RestController 以外的另一种方式,我只需要在组件内部并将 http 响应发送回调用者即可。

【问题讨论】:

    标签: java spring-boot spring-restcontroller


    【解决方案1】:

    修改此代码以匹配您的代码:

    @Controller
    public class RestController {
    
    @RequestMapping(value = "/**/{path:.*}")
    public String index(final HttpServletRequest request) {
        final String url = request.getRequestURI();
    
        return "something";
    }
    }
    

    【讨论】:

    • 您还可以使用以下代码处理函数内部的某些特定 url:if (url.startsWith("/something")) { return "something"; }
    • 基本上规则是添加一个正则表达式作为value参数@RequestMapping注解的值
    • 我尝试将您的正则表达式添加到映射中,但在运行示例请求时仍然得到 404
    • 不过,当我使用"/**/{path:.*}" 时它可以工作,也许您可​​以更正答案,以便我接受。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-03
    • 2020-10-29
    • 1970-01-01
    • 1970-01-01
    • 2019-05-25
    • 2021-09-16
    相关资源
    最近更新 更多