Spring GetMapping正则配置问题:需拦截不含e参数的URL
Spring GetMapping 匹配规则问题解决方案
问题根源
你当前的写法错误在于:路径变量numericId的正则仅作用于URL的路径部分(即?前面的内容),而e=L90属于查询参数,不在路径变量的匹配范围内,所以你的正则根本无法检测到查询参数里的e,导致规则完全失效。
正确解决方案
方式一:利用@GetMapping的params属性直接过滤
Spring MVC提供了params属性,可以精准控制请求参数的匹配规则,用!e表示不包含e参数的请求才会匹配该方法。修改后的代码如下:
@RequestMapping("/app") public class UserController { // 仅处理不带e参数的请求 @GetMapping(value = "/embed/**", params = "!e") public String sendEmbedRedirect() { // 你的业务逻辑代码 return "redirect:your-target-url"; } }
"/embed/**":匹配/embed下的所有层级路径,覆盖你需要的URL结构params = "!e":明确指定只有请求中不存在e参数时,才会触发该方法
方式二:配置前端路由接管带e参数的请求
为了让带e参数的请求直接由前端处理,需要在Spring配置中让这类请求转发到前端入口页面(比如index.html),配置示例如下:
@Configuration public class WebMvcConfig implements WebMvcConfigurer { @Override public void addViewControllers(ViewControllerRegistry registry) { // 当请求包含e参数时,转发到前端页面 registry.addViewController("/embed/**") .setViewName("forward:/index.html") .setCondition(request -> request.getParameter("e") != null); } }
验证规则
- 允许的URL(无
e参数):会被UserController的sendEmbedRedirect方法处理 - 禁止的URL(含
e参数):会被转发到前端页面,由前端路由接管
内容的提问来源于stack exchange,提问作者user3458271
相关产品推荐
相关产品推荐

