【问题标题】:"Circular view path" with simple spring-boot app using @PathVariable使用 @PathVariable 的简单 spring-boot 应用程序的“圆形视图路径”
【发布时间】:2016-04-01 08:30:08
【问题描述】:

我有一个提供静态内容的简单 spring-boot 应用程序。我在 /src/main/resources/public 中有一个 index.html 页面和一些 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”,并意识到这不会很好地结束。

是否可以告诉视图解析器优先考虑静态资源?

【问题讨论】:

    标签: spring spring-mvc


    【解决方案1】:

    当您使用 Thymeleaf 并声明 ThymeleafViewResolver 和带有特定前缀和后缀的 ServletContextTemplateResolver 时,它会以不同的方式构建 View,给它一个类似的路径

    WEB-INF/static/index.html
    

    ThymeleafView 实例使用ServletContextResourceResolver 定位相对于ServletContext 路径的文件

    templateInputStream = resourceResolver.getResourceAsStream(templateProcessingParameters, resourceName);
    

    最终

    return servletContext.getResourceAsStream(resourceName);
    

    这将获得一个相对于ServletContext 路径的资源。然后它可以使用TemplateEngine 生成HTML。这里不可能发生无限循环。

    【讨论】:

    • 更改为 Thymeleaf 解决了我的问题。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2015-01-22
    • 2020-12-25
    • 2020-12-11
    • 1970-01-01
    • 2016-06-28
    • 2012-05-20
    • 2019-07-20
    • 2018-10-14
    相关资源
    最近更新 更多