Spring api 路径过滤指定url

问题描述

Spring 的 swagger 项目中一直在用,最近有一天突然发现 localhost:8080/swagger-ui.html 打不开了。 查了好久的原因才发现, 原来组里面一个‘大神’ 写了一个 api, GetMapping(“/{param}”)这样的。难怪 swagger 打不开了, 因为 url 冲突了, swagger-ui.html 匹配到这个 api 里面去了。

但是这个 api 是和其他系统集成的, 更改的话,还需要其他系统配合,所以比较麻烦,那有没有什么办法把 swagger-ui.html 这样的 url 单独过滤出来呢? 答案是肯定的。

解决方案

其实 Spring 在匹配 api 路径的时候是用正则来操作的, 所以我们可以在 url 的写法上下手,让 Spring 在正则匹配 url 的时候, 让 swagger-ui.html 匹配失败即可。

代码如下:

@GetMapping("/{param:^.*(?!swagger-ui.html)}")

这样除了 swagger-ui.html 的参数意外,其他的仍然会进入到之前的 api 当中, 然后 swagger-ui.html 也会正常地进去 spring swagger 的配置当中,即可以打开 swagger 页面了。

有同样问题的小伙伴, 试试吧!

发表评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注

Scroll to Top