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"的字符序列,结合前面的/**,就能覆盖所有层级的路径。
注意事项
- 如果你保留类上的
@RequestMapping,方法上的路径会和类上的路径拼接,会限制匹配范围。如果想完全全局匹配,建议移除类级别路径注解。 - 通配符匹配可能引发路径冲突,如果项目中有其他Controller方法匹配类似路径,需要调整优先级或优化匹配规则。
内容的提问来源于stack exchange,提问作者ViV
相关产品推荐
相关产品推荐

