Spring Boot:如何匹配所有路由?

MrN*_*NVK 5 java spring spring-boot

我正在开发一个简单的网络应用程序Spring boot 1.5.3,我需要所有路由来发送静态index.html文件。现在,我有这个:

@Controller
public class IndexController {

    @RequestMapping("/*")
    public String index(final HttpServletRequest request) {
        final String url = request.getRequestURI();

        if (url.startsWith("/static")) {
            return String.format("forward:/%s", url);
        }

        return "forward:/static/index.html";
    }
}
Run Code Online (Sandbox Code Playgroud)

我的应用程序仅包含静态资产和 REST API。但问题是上面显示的控制器只匹配第一级 url /index,如/department等。我想匹配所有 url 级别,如/index/some/other/staff等。我该怎么做?

附言。我尝试使用/**中的模板@RequestMapping,但我的应用程序因错误而中断StackOverflow

更新

如果在 url 中再添加一级,那么所有内容都会按预期工作:

@Controller
public class IndexController {

    @RequestMapping("/test/**")
    public String index(final HttpServletRequest request) {
        final String url = request.getRequestURI();

        if (url.startsWith("/static")) {
            return String.format("forward:/%s", url);
        }

        return "forward:/static/index.html";
    }
}
Run Code Online (Sandbox Code Playgroud)

所有对 的请求/test都会/test/some/other/staff返回index.html,但我需要从 开始/

anu*_*ava 7

上面的答案对我来说并没有真正的作用。根据Spring 官方文档,应该这样做:

@RequestMapping(value = "{*path}", method = RequestMethod.GET)
@ResponseBody
public String handleAll(@PathVariable(value = "path") String path) {
    log.debug("Requested path is: {}", path);
    return "forward:/static/index.html";
}
Run Code Online (Sandbox Code Playgroud)


sha*_*njo 3

你可以试试这个:

@Controller
public class IndexController {

@RequestMapping(value = "/**/{path:[^\\.]*}")
public String index(final HttpServletRequest request) {
    final String url = request.getRequestURI();

    if (url.startsWith("/static")) {
        return String.format("forward:/%s", url);
    }

    return "forward:/static/index.html";
}
}
Run Code Online (Sandbox Code Playgroud)