SpringBoot with Thymeleaf - css not found
If you put your css in the static folder, you dont need the addResourceHandlers method.
.../static/css/app.css
Or if you really want to put them in the assets folder:
.addResourceLocations("classpath:/assets/") <-- without the * at the end
.../assets/css/app/css
in both cases the css should be available through
th:href="@{/css/app.css}"
The problem was the @EnableWebMvc
annotation in the Application.java
file. As soon as I removed that one, the css started to be available at localhost:8080/css/style.css
but was not applied. So far I haven't found the reason why the @EnableWebMvc
was causing the problem.
Then I removed a controller mapped to /**
that I had implemented in order to display custom error page.
@RequestMapping("/**")
public String notFound() {
return "errors/404";
}
After removing also this one, I've got my css working. =)
1. Using Custom Resource Path
In your Web Config
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
if (!registry.hasMappingForPattern("/assets/**")) {
registry.addResourceHandler("/assets/**").addResourceLocations("classpath:/assets/");
}
}
Put your style.css
file inside this folder
src/main/resources/assets/css/
After that in your views
<link rel="stylesheet" type="text/css" th:href="@{/assets/css/style.css}" />
.
2. Using predefined paths in spring boot
Remove addResourceHandlers
from your web config
Put the style.css
inside any of the following folders
src/main/resources/META-INF/resources/assets/css
src/main/resources/resources/assets/css/
src/main/resources/static/assets/css/
src/main/resources/public/assets/css/
And in the view
<link rel="stylesheet" type="text/css" th:href="@{/assets/css/style.css}" />
.
NOTE: You can remove the assets
folder here. If you want to do it, remove it from the predefined resource folder and also from the view th:href
. But i kept it as it is because, you explicitly mentioned the assets/
path in your question. So I belive it's your requirement to have assets/
in your resource URL.