Support Java and MVC namespace view resolution config
This commit improves and completes the initial MVC namespace view resolution implementation. ContentNegotiatingViewResolver registration is now also supported. Java Config view resolution support has been added. FreeMarker, Velocity and Tiles view configurers are registered depending on the classpath thanks to an ImportSelector. For both, a default configuration is provided and documented. Issue: SPR-7093
This commit is contained in:
committed by
Rossen Stoyanchev
parent
a26b1ef8d9
commit
cc7e8f5558
@@ -51,7 +51,7 @@ import org.springframework.validation.Errors;
|
||||
import org.springframework.validation.Validator;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean;
|
||||
import org.springframework.web.accept.ContentNegotiationManager;
|
||||
import org.springframework.web.accept.*;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
import org.springframework.web.context.request.NativeWebRequest;
|
||||
@@ -84,13 +84,13 @@ import org.springframework.web.servlet.resource.ResourceResolver;
|
||||
import org.springframework.web.servlet.resource.ResourceTransformer;
|
||||
import org.springframework.web.servlet.theme.ThemeChangeInterceptor;
|
||||
import org.springframework.web.util.UrlPathHelper;
|
||||
import org.springframework.web.servlet.view.BeanNameViewResolver;
|
||||
import org.springframework.web.servlet.view.InternalResourceView;
|
||||
import org.springframework.web.servlet.view.InternalResourceViewResolver;
|
||||
import org.springframework.web.servlet.view.*;
|
||||
import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer;
|
||||
import org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver;
|
||||
import org.springframework.web.servlet.view.tiles3.TilesConfigurer;
|
||||
import org.springframework.web.servlet.view.tiles3.TilesViewResolver;
|
||||
import org.springframework.web.servlet.view.velocity.VelocityConfigurer;
|
||||
import org.springframework.web.servlet.view.velocity.VelocityViewResolver;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
@@ -99,6 +99,7 @@ import static org.junit.Assert.*;
|
||||
* @author Arjen Poutsma
|
||||
* @author Jeremy Grelle
|
||||
* @author Brian Clozel
|
||||
* @author Sebastien Deleuze
|
||||
*/
|
||||
public class MvcNamespaceTests {
|
||||
|
||||
@@ -556,32 +557,95 @@ public class MvcNamespaceTests {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testViewResolvers() throws Exception{
|
||||
loadBeanDefinitions("mvc-config-view-resolvers.xml", 6);
|
||||
InternalResourceViewResolver internalResourceViewResolver=appContext.getBean(InternalResourceViewResolver.class);
|
||||
assertNotNull(internalResourceViewResolver);
|
||||
InternalResourceView jstlView=(InternalResourceView) internalResourceViewResolver.resolveViewName("xyz", Locale.ENGLISH);
|
||||
assertEquals(jstlView.getUrl(), "/WEB-INF/xyz.jsp");
|
||||
|
||||
BeanNameViewResolver beanNameUrlHandlerMapping=appContext.getBean(BeanNameViewResolver.class);
|
||||
assertNotNull(beanNameUrlHandlerMapping);
|
||||
|
||||
TilesConfigurer tilesConfigurer=appContext.getBean(TilesConfigurer.class);
|
||||
assertNotNull(tilesConfigurer);
|
||||
|
||||
TilesViewResolver tilesViewResolver=appContext.getBean(TilesViewResolver.class);
|
||||
assertNotNull(tilesViewResolver);
|
||||
|
||||
FreeMarkerConfigurer freeMarkerConfigurer=appContext.getBean(FreeMarkerConfigurer.class);
|
||||
assertNotNull(freeMarkerConfigurer);
|
||||
|
||||
FreeMarkerViewResolver freeMarkerViewResolver=appContext.getBean(FreeMarkerViewResolver.class);
|
||||
assertNotNull(freeMarkerViewResolver);
|
||||
|
||||
|
||||
}
|
||||
|
||||
public void testViewResolvers() throws Exception {
|
||||
loadBeanDefinitions("mvc-config-view-resolution.xml", 8);
|
||||
|
||||
InternalResourceViewResolver internalResourceViewResolver = appContext.getBean(InternalResourceViewResolver.class);
|
||||
assertNotNull(internalResourceViewResolver);
|
||||
assertEquals(0, internalResourceViewResolver.getOrder());
|
||||
DirectFieldAccessor internalResourceViewResolverFieldAccessor = new DirectFieldAccessor(internalResourceViewResolver);
|
||||
assertEquals("/WEB-INF/", internalResourceViewResolverFieldAccessor.getPropertyValue("prefix"));
|
||||
assertEquals(".jsp", internalResourceViewResolverFieldAccessor.getPropertyValue("suffix"));
|
||||
|
||||
BeanNameViewResolver beanNameViewResolver = appContext.getBean(BeanNameViewResolver.class);
|
||||
assertNotNull(beanNameViewResolver);
|
||||
assertEquals(1, beanNameViewResolver.getOrder());
|
||||
|
||||
TilesConfigurer tilesConfigurer = appContext.getBean(TilesConfigurer.class);
|
||||
assertNotNull(tilesConfigurer);
|
||||
DirectFieldAccessor tilesConfigurerFieldAccessor = new DirectFieldAccessor(tilesConfigurer);
|
||||
assertArrayEquals(new String[]{"/org/springframework/web/servlet/resource/tiles/tiles1.xml","/org/springframework/web/servlet/resource/tiles/tiles2.xml"},
|
||||
(String[])tilesConfigurerFieldAccessor.getPropertyValue("definitions"));
|
||||
assertTrue((boolean)tilesConfigurerFieldAccessor.getPropertyValue("checkRefresh"));
|
||||
|
||||
TilesViewResolver tilesViewResolver = appContext.getBean(TilesViewResolver.class);
|
||||
assertNotNull(tilesViewResolver);
|
||||
assertEquals(2, tilesViewResolver.getOrder());
|
||||
|
||||
FreeMarkerConfigurer freeMarkerConfigurer = appContext.getBean(FreeMarkerConfigurer.class);
|
||||
assertNotNull(freeMarkerConfigurer);
|
||||
DirectFieldAccessor freeMarkerConfigurerFieldAccessor = new DirectFieldAccessor(freeMarkerConfigurer);
|
||||
assertArrayEquals(new String[]{"/","/test"},
|
||||
(String[])freeMarkerConfigurerFieldAccessor.getPropertyValue("templateLoaderPaths"));
|
||||
|
||||
FreeMarkerViewResolver freeMarkerViewResolver = appContext.getBean(FreeMarkerViewResolver.class);
|
||||
assertNotNull(freeMarkerViewResolver);
|
||||
assertEquals(3, freeMarkerViewResolver.getOrder());
|
||||
DirectFieldAccessor freeMarkerViewResolverFieldAccessor = new DirectFieldAccessor(freeMarkerViewResolver);
|
||||
assertEquals("", freeMarkerViewResolverFieldAccessor.getPropertyValue("prefix"));
|
||||
assertEquals(".ftl", freeMarkerViewResolverFieldAccessor.getPropertyValue("suffix"));
|
||||
assertEquals(0, freeMarkerViewResolverFieldAccessor.getPropertyValue("cacheLimit"));
|
||||
|
||||
VelocityConfigurer velocityConfigurer = appContext.getBean(VelocityConfigurer.class);
|
||||
assertNotNull(velocityConfigurer);
|
||||
DirectFieldAccessor velocityConfigurerFieldAccessor = new DirectFieldAccessor(velocityConfigurer);
|
||||
assertEquals("/", velocityConfigurerFieldAccessor.getPropertyValue("resourceLoaderPath"));
|
||||
|
||||
VelocityViewResolver velocityViewResolver = appContext.getBean(VelocityViewResolver.class);
|
||||
assertNotNull(velocityViewResolver);
|
||||
assertEquals(4, velocityViewResolver.getOrder());
|
||||
DirectFieldAccessor velocityViewResolverFieldAccessor = new DirectFieldAccessor(velocityViewResolver);
|
||||
assertEquals("", velocityViewResolverFieldAccessor.getPropertyValue("prefix"));
|
||||
assertEquals(".vm", velocityViewResolverFieldAccessor.getPropertyValue("suffix"));
|
||||
assertEquals(0, velocityViewResolverFieldAccessor.getPropertyValue("cacheLimit"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testContentNegotiating() throws Exception {
|
||||
loadBeanDefinitions("mvc-config-content-negotiating.xml", 11);
|
||||
|
||||
ContentNegotiatingViewResolver contentNegotiatingViewResolver = appContext.getBean(ContentNegotiatingViewResolver.class);
|
||||
assertNotNull(contentNegotiatingViewResolver);
|
||||
DirectFieldAccessor contentNegotiatingViewResolverFieldAccessor = new DirectFieldAccessor(contentNegotiatingViewResolver);
|
||||
assertTrue((boolean)contentNegotiatingViewResolverFieldAccessor.getPropertyValue("useNotAcceptableStatusCode"));
|
||||
assertEquals(1, ((List<?>)contentNegotiatingViewResolverFieldAccessor.getPropertyValue("defaultViews")).size());
|
||||
assertEquals(7, ((List<?>)contentNegotiatingViewResolverFieldAccessor.getPropertyValue("viewResolvers")).size());
|
||||
ContentNegotiationManager contentNegotiationManagerProperty =
|
||||
(ContentNegotiationManager)contentNegotiatingViewResolverFieldAccessor.getPropertyValue("contentNegotiationManager");
|
||||
assertNotNull(contentNegotiationManagerProperty);
|
||||
ContentNegotiationManager contentNegotiationManager = appContext.getBean(ContentNegotiationManager.class);
|
||||
assertNotNull(contentNegotiationManager);
|
||||
assertEquals(contentNegotiationManagerProperty.getClass(), contentNegotiationManager.getClass());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testContentNegotiatingWithDefaultValues() throws Exception {
|
||||
loadBeanDefinitions("mvc-config-content-negotiating-with-default-values.xml", 19);
|
||||
|
||||
ContentNegotiatingViewResolver contentNegotiatingViewResolver = appContext.getBean(ContentNegotiatingViewResolver.class);
|
||||
assertNotNull(contentNegotiatingViewResolver);
|
||||
DirectFieldAccessor contentNegotiatingViewResolverFieldAccessor = new DirectFieldAccessor(contentNegotiatingViewResolver);
|
||||
assertEquals(1, ((List<?>)contentNegotiatingViewResolverFieldAccessor.getPropertyValue("defaultViews")).size());
|
||||
assertEquals(3, ((List<?>)contentNegotiatingViewResolverFieldAccessor.getPropertyValue("viewResolvers")).size());
|
||||
ContentNegotiationManager contentNegotiationManagerProperty =
|
||||
(ContentNegotiationManager)contentNegotiatingViewResolverFieldAccessor.getPropertyValue("contentNegotiationManager");
|
||||
assertNotNull(contentNegotiationManagerProperty);
|
||||
ContentNegotiationManager contentNegotiationManager = appContext.getBean(ContentNegotiationManager.class);
|
||||
assertNotNull(contentNegotiationManager);
|
||||
assertEquals(contentNegotiationManagerProperty.getClass(), contentNegotiationManager.getClass());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testPathMatchingHandlerMappings() throws Exception {
|
||||
loadBeanDefinitions("mvc-config-path-matching-mappings.xml", 20);
|
||||
|
||||
@@ -0,0 +1,205 @@
|
||||
/*
|
||||
* Copyright 2002-2014 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.web.servlet.config.annotation;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.springframework.beans.DirectFieldAccessor;
|
||||
import org.springframework.web.servlet.view.BeanNameViewResolver;
|
||||
import org.springframework.web.servlet.view.ContentNegotiatingViewResolver;
|
||||
import org.springframework.web.servlet.view.InternalResourceViewResolver;
|
||||
import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer;
|
||||
import org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver;
|
||||
import org.springframework.web.servlet.view.json.MappingJackson2JsonView;
|
||||
import org.springframework.web.servlet.view.tiles3.TilesConfigurer;
|
||||
import org.springframework.web.servlet.view.tiles3.TilesViewResolver;
|
||||
import org.springframework.web.servlet.view.velocity.VelocityConfigurer;
|
||||
import org.springframework.web.servlet.view.velocity.VelocityViewResolver;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
/**
|
||||
* Test fixture with a {@link ViewResolutionRegistry}.
|
||||
*
|
||||
* @author Sebastien Deleuze
|
||||
*/
|
||||
public class ViewResolutionRegistryTests {
|
||||
|
||||
private ViewResolutionRegistry registry;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
registry = new ViewResolutionRegistry();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void noViewResolution() {
|
||||
assertNotNull(registry.getViewResolvers());
|
||||
assertEquals(0, registry.getViewResolvers().size());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void customViewResolution() {
|
||||
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
|
||||
viewResolver.setPrefix("/");
|
||||
viewResolver.setSuffix(".jsp");
|
||||
registry.addViewResolver(viewResolver);
|
||||
assertEquals(InternalResourceViewResolver.class, registry.getViewResolvers().get(0).getClass());
|
||||
InternalResourceViewResolver resolver = (InternalResourceViewResolver)registry.getViewResolvers().get(0);
|
||||
DirectFieldAccessor resolverDirectFieldAccessor = new DirectFieldAccessor(resolver);
|
||||
assertEquals("/", resolverDirectFieldAccessor.getPropertyValue("prefix"));
|
||||
assertEquals(".jsp", resolverDirectFieldAccessor.getPropertyValue("suffix"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void beanNameViewResolution() {
|
||||
registry.beanName();
|
||||
assertNotNull(registry.getViewResolvers());
|
||||
assertEquals(1, registry.getViewResolvers().size());
|
||||
assertEquals(BeanNameViewResolver.class, registry.getViewResolvers().get(0).getClass());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void jspViewResolution() {
|
||||
registry.jsp("/", ".jsp");
|
||||
assertNotNull(registry.getViewResolvers());
|
||||
assertEquals(1, registry.getViewResolvers().size());
|
||||
assertEquals(InternalResourceViewResolver.class, registry.getViewResolvers().get(0).getClass());
|
||||
InternalResourceViewResolver resolver = (InternalResourceViewResolver)registry.getViewResolvers().get(0);
|
||||
DirectFieldAccessor resolverDirectFieldAccessor = new DirectFieldAccessor(resolver);
|
||||
assertEquals("/", resolverDirectFieldAccessor.getPropertyValue("prefix"));
|
||||
assertEquals(".jsp", resolverDirectFieldAccessor.getPropertyValue("suffix"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void defaultJspViewResolution() {
|
||||
registry.jsp();
|
||||
assertNotNull(registry.getViewResolvers());
|
||||
assertEquals(1, registry.getViewResolvers().size());
|
||||
assertEquals(InternalResourceViewResolver.class, registry.getViewResolvers().get(0).getClass());
|
||||
InternalResourceViewResolver resolver = (InternalResourceViewResolver)registry.getViewResolvers().get(0);
|
||||
DirectFieldAccessor resolverDirectFieldAccessor = new DirectFieldAccessor(resolver);
|
||||
assertEquals("/WEB-INF/", resolverDirectFieldAccessor.getPropertyValue("prefix"));
|
||||
assertEquals(".jsp", resolverDirectFieldAccessor.getPropertyValue("suffix"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void tilesViewResolution() {
|
||||
registry.tiles().checkRefresh(true).definition("def1").definition("def2");
|
||||
assertNotNull(registry.getViewResolvers());
|
||||
assertEquals(1, registry.getViewResolvers().size());
|
||||
assertEquals(TilesViewResolver.class, registry.getViewResolvers().get(0).getClass());
|
||||
|
||||
assertNotNull(registry.getTilesConfigurer());
|
||||
TilesConfigurer configurer = registry.getTilesConfigurer();
|
||||
DirectFieldAccessor configurerDirectFieldAccessor = new DirectFieldAccessor(configurer);
|
||||
assertTrue((boolean) configurerDirectFieldAccessor.getPropertyValue("checkRefresh"));
|
||||
assertNotNull(configurerDirectFieldAccessor.getPropertyValue("definitions"));
|
||||
String[] definitions = (String[])configurerDirectFieldAccessor.getPropertyValue("definitions");
|
||||
assertEquals(2, definitions.length);
|
||||
assertEquals("def1", definitions[0]);
|
||||
assertEquals("def2", definitions[1]);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void velocityViewResolution() {
|
||||
registry.velocity().prefix("/").suffix(".vm").cache(true).resourceLoaderPath("testResourceLoaderPath");
|
||||
assertNotNull(registry.getViewResolvers());
|
||||
assertEquals(1, registry.getViewResolvers().size());
|
||||
assertEquals(VelocityViewResolver.class, registry.getViewResolvers().get(0).getClass());
|
||||
VelocityViewResolver resolver = (VelocityViewResolver)registry.getViewResolvers().get(0);
|
||||
DirectFieldAccessor resolverDirectFieldAccessor = new DirectFieldAccessor(resolver);
|
||||
assertEquals("/", resolverDirectFieldAccessor.getPropertyValue("prefix"));
|
||||
assertEquals(".vm", resolverDirectFieldAccessor.getPropertyValue("suffix"));
|
||||
assertEquals(1024, resolverDirectFieldAccessor.getPropertyValue("cacheLimit"));
|
||||
|
||||
assertNotNull(registry.getVelocityConfigurer());
|
||||
VelocityConfigurer configurer = registry.getVelocityConfigurer();
|
||||
DirectFieldAccessor configurerDirectFieldAccessor = new DirectFieldAccessor(configurer);
|
||||
assertEquals("testResourceLoaderPath", configurerDirectFieldAccessor.getPropertyValue("resourceLoaderPath"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void defaultVelocityViewResolution() {
|
||||
registry.velocity();
|
||||
assertNotNull(registry.getViewResolvers());
|
||||
assertEquals(1, registry.getViewResolvers().size());
|
||||
assertEquals(VelocityViewResolver.class, registry.getViewResolvers().get(0).getClass());
|
||||
VelocityViewResolver resolver = (VelocityViewResolver)registry.getViewResolvers().get(0);
|
||||
DirectFieldAccessor resolverDirectFieldAccessor = new DirectFieldAccessor(resolver);
|
||||
assertEquals("", resolverDirectFieldAccessor.getPropertyValue("prefix"));
|
||||
assertEquals(".vm", resolverDirectFieldAccessor.getPropertyValue("suffix"));
|
||||
|
||||
assertNotNull(registry.getVelocityConfigurer());
|
||||
VelocityConfigurer configurer = registry.getVelocityConfigurer();
|
||||
DirectFieldAccessor configurerDirectFieldAccessor = new DirectFieldAccessor(configurer);
|
||||
assertEquals("/WEB-INF/", configurerDirectFieldAccessor.getPropertyValue("resourceLoaderPath"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void freeMarkerViewResolution() {
|
||||
registry.freemarker().prefix("/").suffix(".fmt").cache(false).templateLoaderPath("path1", "path2");
|
||||
assertNotNull(registry.getViewResolvers());
|
||||
assertEquals(1, registry.getViewResolvers().size());
|
||||
assertEquals(FreeMarkerViewResolver.class, registry.getViewResolvers().get(0).getClass());
|
||||
FreeMarkerViewResolver resolver = (FreeMarkerViewResolver)registry.getViewResolvers().get(0);
|
||||
DirectFieldAccessor resolverDirectFieldAccessor = new DirectFieldAccessor(resolver);
|
||||
assertEquals("/", resolverDirectFieldAccessor.getPropertyValue("prefix"));
|
||||
assertEquals(".fmt", resolverDirectFieldAccessor.getPropertyValue("suffix"));
|
||||
assertEquals(0, resolverDirectFieldAccessor.getPropertyValue("cacheLimit"));
|
||||
|
||||
assertNotNull(registry.getFreeMarkerConfigurer());
|
||||
FreeMarkerConfigurer configurer = registry.getFreeMarkerConfigurer();
|
||||
DirectFieldAccessor configurerDirectFieldAccessor = new DirectFieldAccessor(configurer);
|
||||
assertNotNull(configurerDirectFieldAccessor.getPropertyValue("templateLoaderPaths"));
|
||||
String[] templateLoaderPaths = (String[])configurerDirectFieldAccessor.getPropertyValue("templateLoaderPaths");
|
||||
assertEquals(2, templateLoaderPaths.length);
|
||||
assertEquals("path1", templateLoaderPaths[0]);
|
||||
assertEquals("path2", templateLoaderPaths[1]);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void defaultFreeMarkerViewResolution() {
|
||||
registry.freemarker();
|
||||
assertNotNull(registry.getViewResolvers());
|
||||
assertEquals(1, registry.getViewResolvers().size());
|
||||
assertEquals(FreeMarkerViewResolver.class, registry.getViewResolvers().get(0).getClass());
|
||||
FreeMarkerViewResolver resolver = (FreeMarkerViewResolver)registry.getViewResolvers().get(0);
|
||||
DirectFieldAccessor resolverDirectFieldAccessor = new DirectFieldAccessor(resolver);
|
||||
assertEquals("", resolverDirectFieldAccessor.getPropertyValue("prefix"));
|
||||
assertEquals(".ftl", resolverDirectFieldAccessor.getPropertyValue("suffix"));
|
||||
DirectFieldAccessor configurerDirectFieldAccessor = new DirectFieldAccessor(registry.getFreeMarkerConfigurer());
|
||||
assertArrayEquals(new String[]{"/WEB-INF/"}, (String[])configurerDirectFieldAccessor.getPropertyValue("templateLoaderPaths"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void contentNegotiatingViewResolution() {
|
||||
registry.contentNegotiating().useNotAcceptable(false).defaultViews(new MappingJackson2JsonView());
|
||||
assertNotNull(registry.getViewResolvers());
|
||||
assertEquals(1, registry.getViewResolvers().size());
|
||||
assertEquals(ContentNegotiatingViewResolver.class, registry.getViewResolvers().get(0).getClass());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void multipleViewResolutions() {
|
||||
registry.jsp().and().beanName();
|
||||
assertNotNull(registry.getViewResolvers());
|
||||
assertEquals(2, registry.getViewResolvers().size());
|
||||
}
|
||||
|
||||
}
|
||||
@@ -17,6 +17,7 @@
|
||||
package org.springframework.web.servlet.config.annotation;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
|
||||
import java.util.Arrays;
|
||||
@@ -24,6 +25,7 @@ import java.util.List;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.springframework.beans.DirectFieldAccessor;
|
||||
import org.springframework.core.Ordered;
|
||||
import org.springframework.tests.sample.beans.TestBean;
|
||||
import org.springframework.core.convert.converter.Converter;
|
||||
import org.springframework.core.io.FileSystemResourceLoader;
|
||||
@@ -54,8 +56,7 @@ import org.springframework.web.context.support.StaticWebApplicationContext;
|
||||
import org.springframework.web.method.annotation.ModelAttributeMethodProcessor;
|
||||
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
|
||||
import org.springframework.web.method.support.HandlerMethodReturnValueHandler;
|
||||
import org.springframework.web.servlet.HandlerExceptionResolver;
|
||||
import org.springframework.web.servlet.HandlerExecutionChain;
|
||||
import org.springframework.web.servlet.*;
|
||||
import org.springframework.web.servlet.handler.AbstractHandlerMapping;
|
||||
import org.springframework.web.servlet.handler.ConversionServiceExposingInterceptor;
|
||||
import org.springframework.web.servlet.handler.HandlerExceptionResolverComposite;
|
||||
@@ -65,12 +66,16 @@ import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandl
|
||||
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;
|
||||
import org.springframework.web.servlet.resource.ResourceUrlProviderExposingInterceptor;
|
||||
import org.springframework.web.util.UrlPathHelper;
|
||||
import org.springframework.web.servlet.view.ContentNegotiatingViewResolver;
|
||||
import org.springframework.web.servlet.view.InternalResourceViewResolver;
|
||||
import org.springframework.web.servlet.view.json.MappingJackson2JsonView;
|
||||
|
||||
/**
|
||||
* A test fixture with a sub-class of {@link WebMvcConfigurationSupport} that
|
||||
* implements the various {@link WebMvcConfigurer} extension points.
|
||||
*
|
||||
* @author Rossen Stoyanchev
|
||||
* @author Sebastien Deleuze
|
||||
*/
|
||||
public class WebMvcConfigurationSupportExtensionTests {
|
||||
|
||||
@@ -78,7 +83,6 @@ public class WebMvcConfigurationSupportExtensionTests {
|
||||
|
||||
private StaticWebApplicationContext webAppContext;
|
||||
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
this.webAppContext = new StaticWebApplicationContext();
|
||||
@@ -211,6 +215,28 @@ public class WebMvcConfigurationSupportExtensionTests {
|
||||
assertEquals(1, composite.getExceptionResolvers().size());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void viewResolvers() throws Exception {
|
||||
ViewResolverComposite viewResolver = webConfig.viewResolverComposite();
|
||||
assertEquals(Ordered.LOWEST_PRECEDENCE, viewResolver.getOrder());
|
||||
List<ViewResolver> viewResolvers = viewResolver.getViewResolvers();
|
||||
DirectFieldAccessor viewResolverFieldAccessor = new DirectFieldAccessor(viewResolvers.get(0));
|
||||
assertEquals(1, viewResolvers.size());
|
||||
assertEquals(ContentNegotiatingViewResolver.class, viewResolvers.get(0).getClass());
|
||||
assertFalse((Boolean)viewResolverFieldAccessor.getPropertyValue("useNotAcceptableStatusCode"));
|
||||
List<View> defaultViews = (List<View>)viewResolverFieldAccessor.getPropertyValue("defaultViews");
|
||||
assertNotNull(defaultViews);
|
||||
assertEquals(1, defaultViews.size());
|
||||
assertEquals(MappingJackson2JsonView.class, defaultViews.get(0).getClass());
|
||||
assertNotNull(viewResolverFieldAccessor.getPropertyValue("contentNegotiationManager"));
|
||||
viewResolvers = (List<ViewResolver>)viewResolverFieldAccessor.getPropertyValue("viewResolvers");
|
||||
assertNotNull(viewResolvers);
|
||||
assertEquals(1, viewResolvers.size());
|
||||
assertEquals(InternalResourceViewResolver.class, viewResolvers.get(0).getClass());
|
||||
viewResolverFieldAccessor = new DirectFieldAccessor(viewResolvers.get(0));
|
||||
assertEquals("/", viewResolverFieldAccessor.getPropertyValue("prefix"));
|
||||
assertEquals(".jsp", viewResolverFieldAccessor.getPropertyValue("suffix"));
|
||||
}
|
||||
|
||||
@Controller
|
||||
private static class TestController {
|
||||
@@ -312,6 +338,12 @@ public class WebMvcConfigurationSupportExtensionTests {
|
||||
registry.addViewController("/path");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void configureViewResolution(ViewResolutionRegistry registry) {
|
||||
registry.jsp("/", ".jsp");
|
||||
registry.contentNegotiating().useNotAcceptable(false).defaultViews(new MappingJackson2JsonView());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addResourceHandlers(ResourceHandlerRegistry registry) {
|
||||
registry.addResourceHandler("/resources/**").addResourceLocations("src/test/java");
|
||||
|
||||
@@ -22,11 +22,11 @@ import javax.servlet.http.HttpServletRequest;
|
||||
import org.joda.time.DateTime;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
import org.springframework.beans.DirectFieldAccessor;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.context.annotation.Scope;
|
||||
import org.springframework.core.Ordered;
|
||||
import org.springframework.context.annotation.ScopedProxyMode;
|
||||
import org.springframework.core.convert.ConversionService;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
@@ -48,6 +48,8 @@ import org.springframework.web.context.support.AnnotationConfigWebApplicationCon
|
||||
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.ViewResolverComposite;
|
||||
import org.springframework.web.servlet.handler.AbstractHandlerMapping;
|
||||
import org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping;
|
||||
import org.springframework.web.servlet.handler.ConversionServiceExposingInterceptor;
|
||||
@@ -69,6 +71,7 @@ import static org.junit.Assert.*;
|
||||
*
|
||||
* @author Rossen Stoyanchev
|
||||
* @author Juergen Hoeller
|
||||
* @author Sebastien Deleuze
|
||||
*/
|
||||
public class WebMvcConfigurationSupportTests {
|
||||
|
||||
@@ -199,6 +202,14 @@ public class WebMvcConfigurationSupportTests {
|
||||
assertEquals(1, interceptors.size());
|
||||
assertEquals(JsonViewResponseBodyAdvice.class, interceptors.get(0).getClass());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void viewResolvers() throws Exception {
|
||||
ViewResolverComposite compositeResolver = this.wac.getBean(ViewResolverComposite.class);
|
||||
assertEquals(Ordered.LOWEST_PRECEDENCE, compositeResolver.getOrder());
|
||||
List<ViewResolver> viewResolvers = compositeResolver.getViewResolvers();
|
||||
assertEquals(0, viewResolvers.size());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void defaultPathMatchConfiguration() throws Exception {
|
||||
|
||||
Reference in New Issue
Block a user