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
master
Rossen Stoyanchev 10 years ago
parent 7f7fd7d311
commit dfcc1d7e8c
  1. 11
      spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/WebMvcConfigurationSupport.java
  2. 4
      spring-webmvc/src/test/java/org/springframework/web/servlet/config/annotation/WebMvcConfigurationSupportTests.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.mvc.support.DefaultHandlerExceptionResolver;
import org.springframework.web.servlet.resource.ResourceUrlProvider; import org.springframework.web.servlet.resource.ResourceUrlProvider;
import org.springframework.web.servlet.resource.ResourceUrlProviderExposingInterceptor; 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.servlet.view.ViewResolverComposite;
import org.springframework.web.util.UrlPathHelper; import org.springframework.web.util.UrlPathHelper;
@ -779,6 +780,9 @@ public class WebMvcConfigurationSupport implements ApplicationContextAware, Serv
* {@link org.springframework.core.Ordered#HIGHEST_PRECEDENCE * {@link org.springframework.core.Ordered#HIGHEST_PRECEDENCE
* Ordered.HIGHEST_PRECEDENCE}. * Ordered.HIGHEST_PRECEDENCE}.
* *
* <p>An {@code InternalResourceViewResolver} is added by default if no other
* resolvers are configured.
*
* @since 4.1 * @since 4.1
*/ */
@Bean @Bean
@ -788,9 +792,14 @@ public class WebMvcConfigurationSupport implements ApplicationContextAware, Serv
registry.setApplicationContext(this.applicationContext); registry.setApplicationContext(this.applicationContext);
configureViewResolvers(registry); configureViewResolvers(registry);
List<ViewResolver> viewResolvers = registry.getViewResolvers();
if (viewResolvers.isEmpty()) {
viewResolvers.add(new InternalResourceViewResolver());
}
ViewResolverComposite composite = new ViewResolverComposite(); ViewResolverComposite composite = new ViewResolverComposite();
composite.setOrder(registry.getOrder()); composite.setOrder(registry.getOrder());
composite.setViewResolvers(registry.getViewResolvers()); composite.setViewResolvers(viewResolvers);
composite.setApplicationContext(this.applicationContext); composite.setApplicationContext(this.applicationContext);
composite.setServletContext(this.servletContext); composite.setServletContext(this.servletContext);
return composite; return composite;

@ -49,6 +49,7 @@ import org.springframework.web.method.support.CompositeUriComponentsContributor;
import org.springframework.web.servlet.HandlerExceptionResolver; import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.HandlerExecutionChain; import org.springframework.web.servlet.HandlerExecutionChain;
import org.springframework.web.servlet.ViewResolver; 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.view.ViewResolverComposite;
import org.springframework.web.servlet.handler.AbstractHandlerMapping; import org.springframework.web.servlet.handler.AbstractHandlerMapping;
import org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping; import org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping;
@ -208,7 +209,8 @@ public class WebMvcConfigurationSupportTests {
ViewResolverComposite compositeResolver = this.wac.getBean(ViewResolverComposite.class); ViewResolverComposite compositeResolver = this.wac.getBean(ViewResolverComposite.class);
assertEquals(Ordered.LOWEST_PRECEDENCE, compositeResolver.getOrder()); assertEquals(Ordered.LOWEST_PRECEDENCE, compositeResolver.getOrder());
List<ViewResolver> resolvers = compositeResolver.getViewResolvers(); List<ViewResolver> resolvers = compositeResolver.getViewResolvers();
assertEquals(0, resolvers.size()); assertEquals(1, resolvers.size());
assertEquals(InternalResourceViewResolver.class, resolvers.get(0).getClass());
} }
@Test @Test

Loading…
Cancel
Save