springboot的api如何配置多个统一前缀

发布于 2022-09-12 04:49:39 字数 382 浏览 16 评论 0

springboot的api如何配置多个统一前缀,比如,`GET /{prefix1}/user`和`GET /{prefix2/user`访问的是同一个接口,如何实现?上网查了一下,springboot可以通过`server.servlet.context-path`统一配置api的前缀,但是只能配置一个,如何实现配置一个或者多个?
另外,以下两种方式也也可以实现,但是不是全局的,要一个接口一个接口去写:
* 方法上加`@GetMapping(value = {"/{prefix1}/user", "/{prefix2}/user"}`;
* 类上加`@RequestMapping(value = {"/{prefix1}/user", "/{prefix2}/user"}`
不知道有没有更好的方式呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

情愿 2022-09-19 04:49:39

在类上配置多个前缀是最好的办法:

@RestController
@RequestMapping(value = {"/prefix1","/prefix2"})
public class HelloWorldController {
    @GetMapping("/hello")
    public String Hello(){
        return "hello,world!";
 }
}
轻拂→两袖风尘 2022-09-19 04:49:39

要不写一个拦截器,把请求路径是prefix2的,替换成prefix1,然后再去请求

深者入戏 2022-09-19 04:49:39

可以通过过滤器拦截请求,并修改请求后转发的思路去全局实现
过滤器的doFilter 方法如下:

@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws ServletException, IOException {
    HttpServletRequest httpRequest = (HttpServletRequest) request;
    String path = httpRequest.getRequestURI();
    //前缀数组
    String[] prefixArr = new String[]{"/prefix1", "/prefix2"};
    for (String prefix : prefixArr) {
        //以前缀开头的请求
        if (path.startsWith(prefix)) {
            //替换掉前缀
            path = path.replace(prefix, "");
            //转发
            httpRequest.getRequestDispatcher(path).forward(request, response);
            return;
        }
    }
    httpRequest.getRequestDispatcher(path).forward(request, response);
    return;
}

TestController

@RestController
public class TestController {
    @RequestMapping("/user")
    public String get(){
        return "123";
    }
}

以下三种地址都可以访问同一个Controller

  1. /{prefix1}/user
  2. /{prefix2}/user
  3. /user
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文