Not to raise the dead after more than a year, but all the previous answers miss some crucial points:
-
@EnableWebMvcon your class will disableorg.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration. That’s fine if you want complete control but otherwise, it’s a problem. -
There’s no need to write any code to add another location for static resources in addition to what is already provided. Looking at
org.springframework.boot.autoconfigure.web.ResourcePropertiesfrom v1.3.0.RELEASE, I see a fieldstaticLocationsthat can be configured in theapplication.properties. Here’s a snippet from the source:/** * Locations of static resources. Defaults to classpath:[/META-INF/resources/, * /resources/, /static/, /public/] plus context:/ (the root of the servlet context). */ private String[] staticLocations = RESOURCE_LOCATIONS; -
As mentioned before, the request URL will be resolved relative to these locations. Thus
src/main/resources/static/index.htmlwill be served when the request URL is/index.html. The class that is responsible for resolving the path, as of Spring 4.1, isorg.springframework.web.servlet.resource.PathResourceResolver. -
Suffix pattern matching is enabled by default which means for a request URL
/index.html, Spring is going to look for handlers corresponding to/index.html. This is an issue if the intention is to serve static content. To disable that, extendWebMvcConfigurerAdapter(but don’t use@EnableWebMvc) and overrideconfigurePathMatchas shown below:@Override public void configurePathMatch(PathMatchConfigurer configurer) { super.configurePathMatch(configurer); configurer.setUseSuffixPatternMatch(false); }
IMHO, the only way to have fewer bugs in your code is not to write code whenever possible. Use what is already provided, even if that takes some research, the return is worth it.
Edit July 2021:
WebMvcConfigurerAdapterhas been deprecated since Spring 5. ImplementWebMvcConfigurerand annotate with@Configuration.