You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring MVC:如何让含特定单词的URL自动匹配对应Controller方法?

实现URL包含特定关键词时触发Controller方法

当然可以实现这个需求!你不用再手动枚举所有可能的路径前缀,Spring MVC提供了两种非常灵活的方式来让你的getEmployeeList方法响应所有包含"emp"关键词的URL请求。

方法一:使用Ant风格通配符路径匹配

Spring MVC原生支持Ant风格的路径匹配规则,其中:

  • ** 匹配任意多层路径(包括0层)
  • * 匹配任意长度的字符序列(不包含路径分隔符/)

你只需要修改getEmployeeList方法上的请求映射注解,用通配符来匹配所有包含"emp"的路径:

@Controller
// 若想完全不受类级别路径限制,可移除这行注解
@RequestMapping({"/employee","/nonemployee","/temp"})
public class EmployeeController {

    // 匹配所有包含"emp"关键词的URL
    @GetMapping("/**/*emp*")
    public ResponseEntity<List<Employee>> getEmployeeList() {
        // 你的业务逻辑代码
        List<Employee> employees = employeeService.getAllEmployees();
        return ResponseEntity.ok(employees);
    }
}

这个配置会匹配所有符合以下条件的URL:

  • 不管路径前缀是什么(比如/exempt/、/internal/等)
  • 路径中任意位置包含"emp"字符串(比如/employees、/emp-details、/exempt/employees等)

方法二:使用正则表达式路径匹配

如果你需要更精确的匹配规则,还可以用Spring的正则表达式路径匹配功能,直接指定路径中必须包含"emp"关键词:

@Controller
public class EmployeeController {

    // 用正则表达式匹配包含"emp"的任意路径
    @GetMapping("/**/{segment:.*emp.*}")
    public ResponseEntity<List<Employee>> getEmployeeList() {
        // 你的业务逻辑代码
        List<Employee> employees = employeeService.getAllEmployees();
        return ResponseEntity.ok(employees);
    }
}

这里的{segment:.*emp.*}是一个正则表达式变量:

  • segment是自定义的变量名
  • .*emp.*表示匹配任意包含"emp"的字符序列,结合前面的/**,就能覆盖所有层级的路径。

注意事项

  1. 如果你保留类上的@RequestMapping,方法上的路径会和类上的路径拼接,会限制匹配范围。如果想完全全局匹配,建议移除类级别路径注解。
  2. 通配符匹配可能引发路径冲突,如果项目中有其他Controller方法匹配类似路径,需要调整优先级或优化匹配规则。

内容的提问来源于stack exchange,提问作者ViV

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:02:51