Thymeleaf, Spring Boot 2: неверный путь к ресурсам при обработке ошибки - PullRequest
1 голос
/ 11 февраля 2020

У меня есть базовое c приложение SpringBoot Thymeleaf с настройками по умолчанию:

id 'org.springframework.boot' version '2.2.2.RELEASE'
compile("org.springframework.boot:spring-boot-starter-web")
compile("org.springframework.boot:spring-boot-starter-thymeleaf")
compile("nz.net.ultraq.thymeleaf:thymeleaf-layout-dialect")

Проблема в неверный путь к ресурсам в некоторых случаях при обработке ошибки и в результате приложения не могу отобразить ресурсы (css / js / image) на странице.

Путь к ресурсам: /src/main/resources/static/assets

Для пути регистрации я сделал RequestInterceptor. Он регистрирует часть URL запроса.

Я описываю 4 случая. Пути и журналы в перехватчике:

  1. вызов правильного пути /home - все отлично работает
[09:02:48.759][INFO] /home
[09:02:48.759][INFO] /assets/img/java60.png
вызов неверного пути /first (ожидайте ошибку 404) - все работает нормально
[09:02:48.759][INFO] /first
[09:02:48.777][INFO] /error
[09:02:49.589][INFO] /assets/css/simple.css
[09:02:49.590][INFO] /assets/img/notFound.png
[09:02:49.715][INFO] /favicon.ico
вызов неверного пути /first/second (ожидается ошибка 404) - неожиданное поведение
[09:03:00.390][INFO] /first/second
[09:03:00.395][INFO] /error
[09:03:00.422][INFO] /first/assets/css/simple.css
[09:03:00.422][INFO] /first/assets/img/notFound.png
[09:03:00.426][INFO] /error
[09:03:00.426][INFO] /error
вызов неверного пути /first/second/third (ожидание ошибки 404) - неожиданное поведение
[09:39:06.404][INFO] /first/second/third
[09:39:06.409][INFO] /error
[09:39:06.441][INFO] /first/second/assets/css/simple.css
[09:39:06.441][INFO] /first/second/assets/img/notFound.png
[09:39:06.446][INFO] /error
[09:39:06.446][INFO] /error

В третьем и четвертом случаях приложение перенаправляет на ошибку и устанавливает путь ( URL запроса + путь к ресурсам на странице). Почему Spring делает неверный путь к ресурсам в 3 и 4 случаях?

Полный исходный код доступен на Github

1 Ответ

1 голос
/ 12 февраля 2020

Вы должны связать ресурсы, используя абсолютный путь. В настоящее время вы ссылаетесь, используя относительные пути, такие как <link rel="stylesheet" th:href="@{assets/css/simple.css}">.

Попробуйте обновить свои ресурсы до:

<link rel="stylesheet" th:href="@{/assets/css/simple.css}">
<img th:src="@{/assets/img/java60.png}" sizes="16x16" alt="love">
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...