From dfcc1d7e8c8051004b6a8cd8329eed0f6c71efd2 Mon Sep 17 00:00:00 2001 From: Rossen Stoyanchev Date: Thu, 17 Jul 2014 16:46:40 -0400 Subject: [PATCH] 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 element is present. Issue: SPR-7093 --- .../config/annotation/WebMvcConfigurationSupport.java | 11 ++++++++++- .../annotation/WebMvcConfigurationSupportTests.java | 4 +++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/WebMvcConfigurationSupport.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/WebMvcConfigurationSupport.java index 08fa7d1022..084250ae49 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/WebMvcConfigurationSupport.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/WebMvcConfigurationSupport.java @@ -81,6 +81,7 @@ import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice; import org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver; import org.springframework.web.servlet.resource.ResourceUrlProvider; import org.springframework.web.servlet.resource.ResourceUrlProviderExposingInterceptor; +import org.springframework.web.servlet.view.InternalResourceViewResolver; import org.springframework.web.servlet.view.ViewResolverComposite; import org.springframework.web.util.UrlPathHelper; @@ -779,6 +780,9 @@ public class WebMvcConfigurationSupport implements ApplicationContextAware, Serv * {@link org.springframework.core.Ordered#HIGHEST_PRECEDENCE * Ordered.HIGHEST_PRECEDENCE}. * + *

An {@code InternalResourceViewResolver} is added by default if no other + * resolvers are configured. + * * @since 4.1 */ @Bean @@ -788,9 +792,14 @@ public class WebMvcConfigurationSupport implements ApplicationContextAware, Serv registry.setApplicationContext(this.applicationContext); configureViewResolvers(registry); + List viewResolvers = registry.getViewResolvers(); + if (viewResolvers.isEmpty()) { + viewResolvers.add(new InternalResourceViewResolver()); + } + ViewResolverComposite composite = new ViewResolverComposite(); composite.setOrder(registry.getOrder()); - composite.setViewResolvers(registry.getViewResolvers()); + composite.setViewResolvers(viewResolvers); composite.setApplicationContext(this.applicationContext); composite.setServletContext(this.servletContext); return composite; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/config/annotation/WebMvcConfigurationSupportTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/config/annotation/WebMvcConfigurationSupportTests.java index 7e704842a7..b7f8a8f382 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/config/annotation/WebMvcConfigurationSupportTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/config/annotation/WebMvcConfigurationSupportTests.java @@ -49,6 +49,7 @@ import org.springframework.web.method.support.CompositeUriComponentsContributor; import org.springframework.web.servlet.HandlerExceptionResolver; import org.springframework.web.servlet.HandlerExecutionChain; import org.springframework.web.servlet.ViewResolver; +import org.springframework.web.servlet.view.InternalResourceViewResolver; import org.springframework.web.servlet.view.ViewResolverComposite; import org.springframework.web.servlet.handler.AbstractHandlerMapping; import org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping; @@ -208,7 +209,8 @@ public class WebMvcConfigurationSupportTests { ViewResolverComposite compositeResolver = this.wac.getBean(ViewResolverComposite.class); assertEquals(Ordered.LOWEST_PRECEDENCE, compositeResolver.getOrder()); List resolvers = compositeResolver.getViewResolvers(); - assertEquals(0, resolvers.size()); + assertEquals(1, resolvers.size()); + assertEquals(InternalResourceViewResolver.class, resolvers.get(0).getClass()); } @Test