我有一个简单的spring-boot应用程序,可以提供静态内容。我有一个index.html页面和/ src / main / resources / public中的一些js / css。我有一个简单的控制器如下:
@Controller
public class PublicController {
@RequestMapping(value="/", method=RequestMethod.GET)
public String index() {
return "index";
}
}
按预期工作。我运行curl http://localhost:8080/
,它会传递我的HTML。
现在我想修改控制器以获取路径变量:
// ...
@RequestMapping(value="/{word}", method=RequestMapping.GET)
public String index(@PathVariable("word") String word) {
return "index";
}
但是现在我得到一个500长的"圆形视图路径"异常。
我认为正在发生的事情是视图解析器看到我的控制器可以处理" / index",并意识到它不会很好地结束。
是否可以告诉视图解析器为静态资源赋予优先级?
答案 0 :(得分:1)
当您使用Thymeleaf
并声明声明具有特定前缀和后缀的ThymeleafViewResolver
和ServletContextTemplateResolver
时,它会以不同方式构建View
,为其提供类似<的路径/ p>
WEB-INF/static/index.html
ThymeleafView
个实例使用ServletContext
ServletContextResourceResolver
路径的文件
templateInputStream = resourceResolver.getResourceAsStream(templateProcessingParameters, resourceName);
最终
return servletContext.getResourceAsStream(resourceName);
这将获得相对于ServletContext
路径的资源。然后,它可以使用TemplateEngine
生成HTML。这里无法发生无限循环。