Ошибка разрешения шаблона с помощью 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.

Другие вопросы по тегам