diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/thymeleaf/ThymeleafAutoConfiguration.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/thymeleaf/ThymeleafAutoConfiguration.java index bf829a6c10e..fbaa5c67bdc 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/thymeleaf/ThymeleafAutoConfiguration.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/thymeleaf/ThymeleafAutoConfiguration.java @@ -182,9 +182,9 @@ public class ThymeleafAutoConfiguration { "excludedViewNames", String[].class)); resolver.setViewNames(this.environment.getProperty("viewNames", String[].class)); - // Needs to come before any fallback resolver (e.g. a - // InternalResourceViewResolver) - resolver.setOrder(Ordered.LOWEST_PRECEDENCE - 20); + // This resolver acts as a fallback resolver (e.g. like a + // InternalResourceViewResolver) so it needs to have low precedence + resolver.setOrder(Ordered.LOWEST_PRECEDENCE - 5); return resolver; } diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/WebMvcAutoConfiguration.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/WebMvcAutoConfiguration.java index 49be49de5f9..8039a13fb44 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/WebMvcAutoConfiguration.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/WebMvcAutoConfiguration.java @@ -179,8 +179,8 @@ public class WebMvcAutoConfiguration { @Bean @ConditionalOnBean(ViewResolver.class) - public ContentNegotiatingViewResolver contentNegotiatingViewResolver( - BeanFactory beanFactory) { + @ConditionalOnMissingBean(name = "viewResolver") + public ContentNegotiatingViewResolver viewResolver(BeanFactory beanFactory) { ContentNegotiatingViewResolver resolver = new ContentNegotiatingViewResolver(); resolver.setContentNegotiationManager(beanFactory .getBean(ContentNegotiationManager.class)); diff --git a/spring-boot-docs/src/main/asciidoc/howto.adoc b/spring-boot-docs/src/main/asciidoc/howto.adoc index b6b11cd9e2c..c2107e249c7 100644 --- a/spring-boot-docs/src/main/asciidoc/howto.adoc +++ b/spring-boot-docs/src/main/asciidoc/howto.adoc @@ -747,9 +747,8 @@ added. client. There is a useful https://spring.io/blog/2013/06/03/content-negotiation-using-views[blog about `ContentNegotiatingViewResolver`] that you might like to study to learn more, and also look at the source code for detail. - Be careful not to define your own `ViewResolver` with id ``viewResolver'' (like the - `ContentNegotiatingViewResolver`) otherwise, in that case, your bean will be - overwritten, not the other way round. + You can switch off the auto-configured + `ContentNegotiatingViewResolver` by defining a bean named ``viewResolver''. * If you use Thymeleaf you will also have a `ThymeleafViewResolver` with id ``thymeleafViewResolver''. It looks for resources by surrounding the view name with a