我目前正在开发一个项目,我需要提供驻留在文件系统上的静态文件(在JAR文件之外)。
我现在有什么:
@Configuration
@ComponentScan({"some.package"})
public class MaboConfiguration extends WebMvcConfigurerAdapter {
/* Irrelevant configs omitted */
@Value("${application.pdfpath}")
public String pdfPath;
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/files/**")
.addResourceLocations("file:" + this.pdfPath);
super.addResourceHandlers(registry);
}
}
这适用于已配置的“pdfPath”目录中的大多数文件。现在问题是,找不到包含特殊字符的文件(例如:“ä”,“ö”,“ü”,...),服务器返回404.
工作文件示例(给定pdfPath为/ opt / tst /):
"/opt/tst/tstdir/with some space/01 - my tst pdf.pdf" -> is served under
"http://localhost:8100/contextRoot/files/tstdir/with some space/01 - my tst pdf.pdf"
不工作文件的示例:
"/opt/tst/tstdir/with some space/01 - my ätst pdf.pdf" -> should be served under
"http://localhost:8100/contextRoot/files/tstdir/with some space/01 - my ätst pdf.pdf"
我认为这可能是编码问题。日志显示传入的请求是正确的URL编码(UTF-8,例如:“ä”变为“%C3%A4”)。虽然,使用跟踪,日志还显示弹簧将“%C3%A4”解析为“?”在寻找相应的文件时。
有没有办法告诉解析器使用特定的字符集来解析文件URL?