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
This commit is contained in:
Rossen Stoyanchev
2014-07-17 16:46:40 -04:00
parent 7f7fd7d311
commit dfcc1d7e8c
2 changed files with 13 additions and 2 deletions

View File

@@ -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}.
*
* <p>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<ViewResolver> 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;