spring thymeleaf静态内容HTTP 405

时间:2017-08-04 18:19:44

标签: java spring spring-mvc gradle thymeleaf

我正在使用一个百里香的弹簧靴,并尝试从应用程序中获取图像。

   <img th:src="@{/static/img/png-test.png}"/>

这是我模板文件中的标签。它被渲染到

<img src="/static/img/png-test.png">

我已经尝试添加自己的ResourceHandler

  @Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
    registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
}

这似乎有效,因为在启动时我得到以下消息

2017-08-04 20:16:02.926  INFO 15234 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/static/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]

但浏览器中没有显示图像。相反,我在浏览器控制台中收到以下错误

GET http://localhost:8080/static/img/png-test.png 405 ()

Spring记录以下内容

2017-08-04 19:59:20.265  WARN 14705 --- [nio-8080-exec-5] o.s.web.servlet.PageNotFound             : Request method 'GET' not supported

编辑: 将此添加到我的build.gradle文件

可能是个问题
jar {
    from('src/main/') {
        include 'static/'

    }
}

因为否则gradle永远不会将静态文件夹放入jar

编辑: 我发现了重现失败所需要的东西

我的控制器里面有一个看起来像这样的功能

@RequestMapping(name = "/", method = RequestMethod.POST)
public String func(@RequestParam(name = "var1") String var1, @RequestParam(name = "var2") String var2){
    return "templatename";
}

当我取消注释该功能时,我能够接收静态内容。 至少方法不允许现在有意义。因为它期待一个POST。

那么如何在不重新映射函数的情况下解决这个问题呢?

2 个答案:

答案 0 :(得分:1)

默认情况下,Spring Boot将提供来自your_app_dir/srce/main/resources/staticyour_app_dir/srce/main/resources/public的静态资源。如果您将静态资源放在其他位置,请将静态资源移动到其中一个目录中,您应该很高兴。

答案 1 :(得分:1)

我只是注意到我只是愚蠢。 我写了

@RequestMapping(name = "/", method = RequestMethod.POST)

而不是

@RequestMapping(value = "/", method = RequestMethod.POST)

通过我的控制器中的一个功能。将此函数映射到/**因此,我对任何静态内容的请求被路由到此函数,该函数仅接受POST方法。

但仍然是@Kirby的一个大笨蛋