весна-веб, webmvc 4.1.6 Thymeleaf 2.1О реализации getResource в GenericApplicationContext
Я работаю для Мануалы конфигурации Thymeleaf в SpringBoot. Я хочу установить путь в ServletContextTemplateResolver с префиксом "classpath:". Что я могу сделать для решения этой проблемы?
@Bean
public ServletContextTemplateResolver templateResolver() {
ServletContextTemplateResolver templateResolver = new ServletContextTemplateResolver();
templateResolver.setPrefix("classpath:/templates/");
templateResolver.setSuffix(".html");
templateResolver.setTemplateMode("HTML5");
templateResolver.setCacheable(false);
return templateResolver;
}
Но это не сработает. Причиной этого является код ниже. В org.springframework.context.support.GenericApplicationContext
@Override
public Resource getResource(String location) {
if (this.resourceLoader != null) {
return this.resourceLoader.getResource(location); // with setting of template resolver
}
return super.getResource(location); // without setting of template resolver
}
Без каких-либо настроек ServletContextTemplateResolver, GenericApplicationContext.getResource называется.
С его установкой Вызывается StandardRoot.getResourceAsStream. Но этот метод не имеет поддержки префикса "class:".
Успешно getResource
"ClassPathResource реализуется"
@Override
public Resource getResource(String location) {
Assert.notNull(location, "Location must not be null");
if (location.startsWith("/")) {
return getResourceByPath(location);
}
else if (location.startsWith(CLASSPATH_URL_PREFIX)) {
return new ClassPathResource(location.substring(CLASSPATH_URL_PREFIX.length()), getClassLoader());
}
else {
try {
// Try to parse the location as a URL...
URL url = new URL(location);
return new UrlResource(url);
}
catch (MalformedURLException ex) {
// No URL -> resolve as resource path.
return getResourceByPath(location);
}
}
}
Failed getResource
В этом коде, префикс не будет реализован так, я понял, что я не могу использовать «класс:» префикс для свойства ServletContextTemplateResolver.
В org.apache.catalina.webresources.StandardRoot
@Override
public InputStream getResourceAsStream(String path) {
if (path == null)
return (null);
if (!path.startsWith("/") && GET_RESOURCE_REQUIRE_SLASH)
return null;
WebResourceRoot resources = context.getResources();
if (resources != null) {
return resources.getResource(path).getInputStream();
}
return null;
}