Spring框架中如何排除含API的URL调用指定控制器方法?
实现URL不含"api"时调用指定方法的方案
针对你的需求,有两种简单易上手的实现方式,适合Spring新手:
方式一:正则表达式路径匹配(推荐)
利用Spring支持的正则路径匹配语法,直接通过@RequestMapping匹配所有不包含"api"的URL,同时保留原有API请求的处理逻辑:
@Controller public class RouterController { // 处理所有以/api开头的请求 @RequestMapping("/api/**") public String apiApp() { // 原有API请求的处理逻辑 ... } // 处理所有不包含"api"的请求 @RequestMapping(value = "{**path:^(?!.*api).*$}") public String nonApiHandler() { // 你需要调用的指定方法逻辑 ... return "your-target-view"; } }
说明
{**path:^(?!.*api).*$}是Spring的特殊路径匹配写法:**表示匹配任意层级的URL路径;^(?!.*api).*$是正则的负向预查规则,确保整个URL中不包含"api"子串;
- Spring的路径匹配有优先级,更具体的
/api/**会先匹配,避免冲突。
方式二:全局请求拦截判断
如果觉得正则写法不好理解,可以用全局匹配+代码判断的方式:
@Controller public class RouterController { // 匹配所有请求 @RequestMapping("/**") public String handleAllRequests(HttpServletRequest request) { String requestUrl = request.getRequestURI(); // 判断URL是否包含api if (requestUrl.contains("api")) { // 包含api时,转发到原有API处理方法 return "forward:/api"; } // 不包含api时执行你的逻辑 ... return "your-target-view"; } // 原有API处理方法 @RequestMapping("/api/**") public String app() { ... } }
内容的提问来源于stack exchange,提问作者Doppu
相关产品推荐
相关产品推荐

