Skip to content

Commit dfcc1d7

Browse files
committed
Add default ViewResolver to MVC Java config
Since the MVC Java config always registers a ViewResolver (composite) bean, at a very minimum we must add an InternalResourceViewResolver consistent with default DispatcherServlet configuration and by extension with the MVC namespace which falls back on DispatcherServlet implicity if no <view-resolvers> element is present. Issue: SPR-7093
1 parent 7f7fd7d commit dfcc1d7

File tree

2 files changed

+13
-2
lines changed

2 files changed

+13
-2
lines changed

spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/WebMvcConfigurationSupport.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@
8181
import org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver;
8282
import org.springframework.web.servlet.resource.ResourceUrlProvider;
8383
import org.springframework.web.servlet.resource.ResourceUrlProviderExposingInterceptor;
84+
import org.springframework.web.servlet.view.InternalResourceViewResolver;
8485
import org.springframework.web.servlet.view.ViewResolverComposite;
8586
import org.springframework.web.util.UrlPathHelper;
8687

@@ -779,6 +780,9 @@ protected final void addDefaultHandlerExceptionResolvers(List<HandlerExceptionRe
779780
* {@link org.springframework.core.Ordered#HIGHEST_PRECEDENCE
780781
* Ordered.HIGHEST_PRECEDENCE}.
781782
*
783+
* <p>An {@code InternalResourceViewResolver} is added by default if no other
784+
* resolvers are configured.
785+
*
782786
* @since 4.1
783787
*/
784788
@Bean
@@ -788,9 +792,14 @@ public ViewResolver mvcViewResolver() {
788792
registry.setApplicationContext(this.applicationContext);
789793
configureViewResolvers(registry);
790794

795+
List<ViewResolver> viewResolvers = registry.getViewResolvers();
796+
if (viewResolvers.isEmpty()) {
797+
viewResolvers.add(new InternalResourceViewResolver());
798+
}
799+
791800
ViewResolverComposite composite = new ViewResolverComposite();
792801
composite.setOrder(registry.getOrder());
793-
composite.setViewResolvers(registry.getViewResolvers());
802+
composite.setViewResolvers(viewResolvers);
794803
composite.setApplicationContext(this.applicationContext);
795804
composite.setServletContext(this.servletContext);
796805
return composite;

spring-webmvc/src/test/java/org/springframework/web/servlet/config/annotation/WebMvcConfigurationSupportTests.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@
4949
import org.springframework.web.servlet.HandlerExceptionResolver;
5050
import org.springframework.web.servlet.HandlerExecutionChain;
5151
import org.springframework.web.servlet.ViewResolver;
52+
import org.springframework.web.servlet.view.InternalResourceViewResolver;
5253
import org.springframework.web.servlet.view.ViewResolverComposite;
5354
import org.springframework.web.servlet.handler.AbstractHandlerMapping;
5455
import org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping;
@@ -208,7 +209,8 @@ public void viewResolvers() throws Exception {
208209
ViewResolverComposite compositeResolver = this.wac.getBean(ViewResolverComposite.class);
209210
assertEquals(Ordered.LOWEST_PRECEDENCE, compositeResolver.getOrder());
210211
List<ViewResolver> resolvers = compositeResolver.getViewResolvers();
211-
assertEquals(0, resolvers.size());
212+
assertEquals(1, resolvers.size());
213+
assertEquals(InternalResourceViewResolver.class, resolvers.get(0).getClass());
212214
}
213215

214216
@Test

0 commit comments

Comments
 (0)