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,但我需要从 开始/。
上面的答案对我来说并没有真正的作用。根据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)
你可以试试这个:
@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)
| 归档时间: |
|
| 查看次数: |
7686 次 |
| 最近记录: |