我正在使用一个百里香的弹簧靴,并尝试从应用程序中获取图像。
<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。
那么如何在不重新映射函数的情况下解决这个问题呢?
答案 0 :(得分:1)
默认情况下,Spring Boot将提供来自your_app_dir/srce/main/resources/static
或your_app_dir/srce/main/resources/public
的静态资源。如果您将静态资源放在其他位置,请将静态资源移动到其中一个目录中,您应该很高兴。
答案 1 :(得分:1)
我只是注意到我只是愚蠢。 我写了
@RequestMapping(name = "/", method = RequestMethod.POST)
而不是
@RequestMapping(value = "/", method = RequestMethod.POST)
通过我的控制器中的一个功能。将此函数映射到/**
因此,我对任何静态内容的请求被路由到此函数,该函数仅接受POST
方法。
但仍然是@Kirby的一个大笨蛋