Ошибка разрешения шаблона с помощью Spring Boot с использованием Thymeleaf, упакованного в.jar
У меня есть приложение Spring Boot, использующее Thymeleaf в качестве распознавателя шаблонов, которое прекрасно работает при отладке из NetBeans, но выдает мне эту ошибку при запуске.jar:
Ошибка при разрешении шаблона "/theme/property", шаблон может отсутствовать или быть недоступным для любого из настроенных преобразователей шаблонов
Приложение настроено на автоконфигурацию с аннотацией @SpringBootApplication в расширении SpringBootServletInitializer. Я не установил никакого contextPath в файл свойств. Я использую Thymeleaf 2.1.6 и версию Spring 4. Баночка создается с помощью Maven.
Проведя некоторые исследования, я обнаружил, что в некоторых контроллерах я проходил двойную косую черту, которую я решил, но большинство страниц все еще не работает.
Этот контроллер работает:
@GetMapping("/{idweb}")
String frontEndHome(@PathVariable("idweb")Integer idweb, Model model){
...
return "theme/home";
С оператором return, установленным как return "/theme/home"; не работает Я думаю, потому что распознаватель шаблонов получает двойную косую черту (//).
Этот другой контроллер вызывает ошибку:
@GetMapping("/{idweb}/property")
String frontEndProperty(@PathVariable("idweb") Integer idweb, @RequestParam(value = "idproperty", required = false) Integer idproperty, Model model) throws Exception {
...
return "theme/property";
Контроллер индекса также работает нормально:
@GetMapping("/")
public String index(Model model){
...
return "index";
}
Это мой начальный класс приложения:
@SpringBootApplication
public class RentalWebsApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(RentalWebsApplication.class);
}
public static void main(String[] args) throws Exception {
SpringApplication.run(RentalWebsApplication.class, args);
}
}
Для Thymeleaf я не установил никакой конфигурации, хотя я тестировал приложение, устанавливающее это в файл application.properties, с тем же результатом:
spring.thymeleaf.prefix=classpath:/templates/
Все HTML-файлы установлены в:
src/main/resources/templates
HTML-файлы из примеров находятся в:
src/main/resources/templates/index.html
src/main/resources/templates/theme/home.html
src/main/resources/templates/theme/property.html
Есть некоторые другие вопросы, связанные с той же проблемой, но ни один из них не имеет решения, которое подходит мне. Любая помощь приветствуется.
Обновить
Развертывая банку в Pivotal Web Services, весь веб-сайт работает нормально, но не развертывая ее с Boxfuse, Heroku или локально запуская банку. Поэтому, я полагаю, причиной проблемы является неправильная конфигурация, которую система Pivotal обнаруживает и исправляет. *
* PWS не исправляет проблему конфигурации. Перед запуском приложения он распаковывает ваш jar-файл, что предотвращает возникновение проблемы с двойной косой чертой. - Andy Wilkinson
3 ответа
В конце концов решение было связано с двойной косой чертой, что classpath:/templates/
получает, если мы устанавливаем инструкцию возврата с косой чертой в начале, как:
return "/theme/property"
Вместо:
return "theme/property"
В моем случае проблема была не в контроллере, а в html с ссылками на фрагменты Thymeleaf, как в этом примере:
<footer th:replace="/index::footer"></footer>
Вместо:
<footer th:replace="index::footer"></footer>
Чего я не понимаю, так это почему в IDE (NetBeans и STS) не возникает ошибка.
Использование
return new ModelAndView("member2",map);
вместо
return new ModelAndView("/member2",map);
Удалите spring.thymeleaf.prefix=classpath:/templates/ из вашего application.properties.