Update ViewResolver registration classes
Following the separation of FreeMarker/Velocity/TilesConfigurer-related configuration via separate interface, simplify and streamline the view registration helper classes which no longer have much difference (most are UrlBasedViewResolver's). Updates to Javadoc and tests. Issue: SPR-7093
This commit is contained in:
@@ -147,15 +147,15 @@ public class ViewResolutionIntegrationTests {
|
||||
@Configuration
|
||||
static class MinimalFreeMarkerWebConfig extends AbstractWebConfig {
|
||||
@Override
|
||||
public void configureViewResolution(ViewResolutionRegistry registry) {
|
||||
registry.freemarker();
|
||||
public void configureViewResolvers(ViewResolverRegistry registry) {
|
||||
registry.freeMarker();
|
||||
}
|
||||
}
|
||||
|
||||
@Configuration
|
||||
static class MinimalVelocityWebConfig extends AbstractWebConfig {
|
||||
@Override
|
||||
public void configureViewResolution(ViewResolutionRegistry registry) {
|
||||
public void configureViewResolvers(ViewResolverRegistry registry) {
|
||||
registry.velocity();
|
||||
}
|
||||
}
|
||||
@@ -163,7 +163,7 @@ public class ViewResolutionIntegrationTests {
|
||||
@Configuration
|
||||
static class MinimalTilesWebConfig extends AbstractWebConfig {
|
||||
@Override
|
||||
public void configureViewResolution(ViewResolutionRegistry registry) {
|
||||
public void configureViewResolvers(ViewResolverRegistry registry) {
|
||||
registry.tiles();
|
||||
}
|
||||
}
|
||||
@@ -171,8 +171,8 @@ public class ViewResolutionIntegrationTests {
|
||||
@Configuration
|
||||
static class FreeMarkerWebConfig extends AbstractWebConfig implements FreeMarkerWebMvcConfigurer {
|
||||
@Override
|
||||
public void configureViewResolution(ViewResolutionRegistry registry) {
|
||||
registry.freemarker();
|
||||
public void configureViewResolvers(ViewResolverRegistry registry) {
|
||||
registry.freeMarker();
|
||||
}
|
||||
@Override
|
||||
public void configureFreeMarker(FreeMarkerConfigurer configurer) {
|
||||
@@ -183,7 +183,7 @@ public class ViewResolutionIntegrationTests {
|
||||
@Configuration
|
||||
static class VelocityWebConfig extends AbstractWebConfig implements VelocityWebMvcConfigurer {
|
||||
@Override
|
||||
public void configureViewResolution(ViewResolutionRegistry registry) {
|
||||
public void configureViewResolvers(ViewResolverRegistry registry) {
|
||||
registry.velocity();
|
||||
}
|
||||
@Override
|
||||
@@ -195,7 +195,7 @@ public class ViewResolutionIntegrationTests {
|
||||
@Configuration
|
||||
static class TilesWebConfig extends AbstractWebConfig implements TilesWebMvcConfigurer {
|
||||
@Override
|
||||
public void configureViewResolution(ViewResolutionRegistry registry) {
|
||||
public void configureViewResolvers(ViewResolverRegistry registry) {
|
||||
registry.tiles();
|
||||
}
|
||||
@Override
|
||||
@@ -209,8 +209,8 @@ public class ViewResolutionIntegrationTests {
|
||||
// No @EnableWebMvc and no FreeMarkerConfigurer bean
|
||||
|
||||
@Override
|
||||
public void configureViewResolution(ViewResolutionRegistry registry) {
|
||||
registry.freemarker();
|
||||
public void configureViewResolvers(ViewResolverRegistry registry) {
|
||||
registry.freeMarker();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -220,7 +220,7 @@ public class ViewResolutionIntegrationTests {
|
||||
// No @EnableWebMvc and no VelocityConfigurer bean
|
||||
|
||||
@Override
|
||||
public void configureViewResolution(ViewResolutionRegistry registry) {
|
||||
public void configureViewResolvers(ViewResolverRegistry registry) {
|
||||
registry.velocity();
|
||||
}
|
||||
}
|
||||
@@ -231,7 +231,7 @@ public class ViewResolutionIntegrationTests {
|
||||
// No @EnableWebMvc and no TilesConfigurer bean
|
||||
|
||||
@Override
|
||||
public void configureViewResolution(ViewResolutionRegistry registry) {
|
||||
public void configureViewResolvers(ViewResolverRegistry registry) {
|
||||
registry.tiles();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,172 +0,0 @@
|
||||
/*
|
||||
* 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.context.support.StaticWebApplicationContext;
|
||||
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.FreeMarkerViewResolver;
|
||||
import org.springframework.web.servlet.view.json.MappingJackson2JsonView;
|
||||
import org.springframework.web.servlet.view.tiles3.TilesViewResolver;
|
||||
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(new StaticWebApplicationContext());
|
||||
}
|
||||
|
||||
@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() {
|
||||
this.registry.tiles();
|
||||
assertNotNull(this.registry.getViewResolvers());
|
||||
assertEquals(1, this.registry.getViewResolvers().size());
|
||||
assertEquals(TilesViewResolver.class, this.registry.getViewResolvers().get(0).getClass());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void velocityViewResolution() {
|
||||
registry.velocity().prefix("/").suffix(".vm").cache(true);
|
||||
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"));
|
||||
}
|
||||
|
||||
@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"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void freeMarkerViewResolution() {
|
||||
registry.freemarker().prefix("/").suffix(".fmt").cache(false);
|
||||
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"));
|
||||
}
|
||||
|
||||
@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"));
|
||||
}
|
||||
|
||||
@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());
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,211 @@
|
||||
/*
|
||||
* 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.core.Ordered;
|
||||
import org.springframework.web.accept.ContentNegotiationManager;
|
||||
import org.springframework.web.context.support.StaticWebApplicationContext;
|
||||
import org.springframework.web.servlet.ViewResolver;
|
||||
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 org.springframework.web.servlet.view.xml.MarshallingView;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
/**
|
||||
* Test fixture with a {@link ViewResolverRegistry}.
|
||||
*
|
||||
* @author Sebastien Deleuze
|
||||
* @author Rossen Stoyanchev
|
||||
*/
|
||||
public class ViewResolverRegistryTests {
|
||||
|
||||
private ViewResolverRegistry registry;
|
||||
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
StaticWebApplicationContext context = new StaticWebApplicationContext();
|
||||
context.registerSingleton("freeMarkerConfigurer", FreeMarkerConfigurer.class);
|
||||
context.registerSingleton("velocityConfigurer", VelocityConfigurer.class);
|
||||
context.registerSingleton("tilesConfigurer", TilesConfigurer.class);
|
||||
this.registry = new ViewResolverRegistry();
|
||||
this.registry.setApplicationContext(context);
|
||||
this.registry.setContentNegotiationManager(new ContentNegotiationManager());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void order() {
|
||||
assertEquals(Ordered.LOWEST_PRECEDENCE, this.registry.getOrder());
|
||||
this.registry.enableContentNegotiation();
|
||||
assertEquals(Ordered.HIGHEST_PRECEDENCE, this.registry.getOrder());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void hasRegistrations() {
|
||||
assertFalse(this.registry.hasRegistrations());
|
||||
this.registry.velocity();
|
||||
assertTrue(this.registry.hasRegistrations());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void hasRegistrationsWhenContentNegotiationEnabled() {
|
||||
assertFalse(this.registry.hasRegistrations());
|
||||
this.registry.enableContentNegotiation();
|
||||
assertTrue(this.registry.hasRegistrations());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void noResolvers() {
|
||||
assertNotNull(this.registry.getViewResolvers());
|
||||
assertEquals(0, this.registry.getViewResolvers().size());
|
||||
assertFalse(this.registry.hasRegistrations());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void customViewResolver() {
|
||||
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
|
||||
viewResolver.setPrefix("/");
|
||||
viewResolver.setSuffix(".jsp");
|
||||
this.registry.viewResolver(viewResolver);
|
||||
assertSame(viewResolver, this.registry.getViewResolvers().get(0));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void beanName() {
|
||||
this.registry.beanName();
|
||||
assertEquals(1, this.registry.getViewResolvers().size());
|
||||
assertEquals(BeanNameViewResolver.class, registry.getViewResolvers().get(0).getClass());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void jspDefaultValues() {
|
||||
this.registry.jsp();
|
||||
InternalResourceViewResolver resolver = checkAndGetResolver(InternalResourceViewResolver.class);
|
||||
checkPropertyValues(resolver, "prefix", "/WEB-INF/", "suffix", ".jsp");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void jsp() {
|
||||
this.registry.jsp("/", ".jsp");
|
||||
InternalResourceViewResolver resolver = checkAndGetResolver(InternalResourceViewResolver.class);
|
||||
checkPropertyValues(resolver, "prefix", "/", "suffix", ".jsp");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void jspMultipleResolvers() {
|
||||
this.registry.jsp().viewNames("view1", "view2");
|
||||
this.registry.jsp().viewNames("view3", "view4");
|
||||
assertNotNull(this.registry.getViewResolvers());
|
||||
assertEquals(2, this.registry.getViewResolvers().size());
|
||||
assertEquals(InternalResourceViewResolver.class, this.registry.getViewResolvers().get(0).getClass());
|
||||
assertEquals(InternalResourceViewResolver.class, this.registry.getViewResolvers().get(1).getClass());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void tiles() {
|
||||
this.registry.tiles();
|
||||
checkAndGetResolver(TilesViewResolver.class);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void velocity() {
|
||||
this.registry.velocity().prefix("/").suffix(".vm").cache(true);
|
||||
VelocityViewResolver resolver = checkAndGetResolver(VelocityViewResolver.class);
|
||||
checkPropertyValues(resolver, "prefix", "/", "suffix", ".vm", "cacheLimit", 1024);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void velocityDefaultValues() {
|
||||
this.registry.velocity();
|
||||
VelocityViewResolver resolver = checkAndGetResolver(VelocityViewResolver.class);
|
||||
checkPropertyValues(resolver, "prefix", "", "suffix", ".vm");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void freeMarker() {
|
||||
this.registry.freeMarker().prefix("/").suffix(".fmt").cache(false);
|
||||
FreeMarkerViewResolver resolver = checkAndGetResolver(FreeMarkerViewResolver.class);
|
||||
checkPropertyValues(resolver, "prefix", "/", "suffix", ".fmt", "cacheLimit", 0);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void freeMarkerDefaultValues() {
|
||||
this.registry.freeMarker();
|
||||
FreeMarkerViewResolver resolver = checkAndGetResolver(FreeMarkerViewResolver.class);
|
||||
checkPropertyValues(resolver, "prefix", "", "suffix", ".ftl");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void contentNegotiation() {
|
||||
MappingJackson2JsonView view = new MappingJackson2JsonView();
|
||||
this.registry.enableContentNegotiation(view);
|
||||
ContentNegotiatingViewResolver resolver = checkAndGetResolver(ContentNegotiatingViewResolver.class);
|
||||
assertEquals(Arrays.asList(view), resolver.getDefaultViews());
|
||||
assertEquals(Ordered.HIGHEST_PRECEDENCE, this.registry.getOrder());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void contentNegotiationAddsDefaultViewRegistrations() {
|
||||
MappingJackson2JsonView view1 = new MappingJackson2JsonView();
|
||||
this.registry.enableContentNegotiation(view1);
|
||||
|
||||
ContentNegotiatingViewResolver resolver1 = checkAndGetResolver(ContentNegotiatingViewResolver.class);
|
||||
assertEquals(Arrays.asList(view1), resolver1.getDefaultViews());
|
||||
|
||||
MarshallingView view2 = new MarshallingView();
|
||||
this.registry.enableContentNegotiation(view2);
|
||||
|
||||
ContentNegotiatingViewResolver resolver2 = checkAndGetResolver(ContentNegotiatingViewResolver.class);
|
||||
assertEquals(Arrays.asList(view1, view2), resolver2.getDefaultViews());
|
||||
assertSame(resolver1, resolver2);
|
||||
}
|
||||
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
private <T extends ViewResolver> T checkAndGetResolver(Class<T> resolverType) {
|
||||
assertNotNull(this.registry.getViewResolvers());
|
||||
assertEquals(1, this.registry.getViewResolvers().size());
|
||||
assertEquals(resolverType, this.registry.getViewResolvers().get(0).getClass());
|
||||
return (T) registry.getViewResolvers().get(0);
|
||||
}
|
||||
|
||||
private void checkPropertyValues(ViewResolver resolver, Object... nameValuePairs) {
|
||||
DirectFieldAccessor accessor = new DirectFieldAccessor(resolver);
|
||||
for (int i = 0; i < nameValuePairs.length ; i++, i++) {
|
||||
Object expected = nameValuePairs[i + 1];
|
||||
Object actual = accessor.getPropertyValue((String) nameValuePairs[i]);
|
||||
assertEquals(expected, actual);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -65,39 +65,46 @@ import org.springframework.web.servlet.i18n.LocaleChangeInterceptor;
|
||||
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter;
|
||||
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;
|
||||
import org.springframework.web.servlet.resource.ResourceUrlProviderExposingInterceptor;
|
||||
import org.springframework.web.servlet.view.ViewResolverComposite;
|
||||
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
|
||||
* A test fixture with a sub-class of {@link WebMvcConfigurationSupport} that also
|
||||
* implements the various {@link WebMvcConfigurer} extension points.
|
||||
*
|
||||
* The former doesn't implement the latter but the two must have compatible
|
||||
* callback method signatures to support moving from simple to advanced
|
||||
* configuration -- i.e. dropping @EnableWebMvc + WebMvcConfigurer and extending
|
||||
* directly from WebMvcConfigurationSupport.
|
||||
*
|
||||
* @author Rossen Stoyanchev
|
||||
* @author Sebastien Deleuze
|
||||
*/
|
||||
public class WebMvcConfigurationSupportExtensionTests {
|
||||
|
||||
private TestWebMvcConfigurationSupport webConfig;
|
||||
private TestWebMvcConfigurationSupport config;
|
||||
|
||||
private StaticWebApplicationContext context;
|
||||
|
||||
private StaticWebApplicationContext webAppContext;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
this.webAppContext = new StaticWebApplicationContext();
|
||||
this.webAppContext.setServletContext(new MockServletContext(new FileSystemResourceLoader()));
|
||||
this.webAppContext.registerSingleton("controller", TestController.class);
|
||||
this.context = new StaticWebApplicationContext();
|
||||
this.context.setServletContext(new MockServletContext(new FileSystemResourceLoader()));
|
||||
this.context.registerSingleton("controller", TestController.class);
|
||||
|
||||
this.webConfig = new TestWebMvcConfigurationSupport();
|
||||
this.webConfig.setApplicationContext(this.webAppContext);
|
||||
this.webConfig.setServletContext(this.webAppContext.getServletContext());
|
||||
this.config = new TestWebMvcConfigurationSupport();
|
||||
this.config.setApplicationContext(this.context);
|
||||
this.config.setServletContext(this.context.getServletContext());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void handlerMappings() throws Exception {
|
||||
RequestMappingHandlerMapping rmHandlerMapping = webConfig.requestMappingHandlerMapping();
|
||||
rmHandlerMapping.setApplicationContext(webAppContext);
|
||||
RequestMappingHandlerMapping rmHandlerMapping = this.config.requestMappingHandlerMapping();
|
||||
rmHandlerMapping.setApplicationContext(this.context);
|
||||
rmHandlerMapping.afterPropertiesSet();
|
||||
assertEquals(TestPathHelper.class, rmHandlerMapping.getUrlPathHelper().getClass());
|
||||
assertEquals(TestPathMatcher.class, rmHandlerMapping.getPathMatcher().getClass());
|
||||
@@ -108,8 +115,8 @@ public class WebMvcConfigurationSupportExtensionTests {
|
||||
assertEquals(ConversionServiceExposingInterceptor.class, chain.getInterceptors()[1].getClass());
|
||||
assertEquals(ResourceUrlProviderExposingInterceptor.class, chain.getInterceptors()[2].getClass());
|
||||
|
||||
AbstractHandlerMapping handlerMapping = (AbstractHandlerMapping) webConfig.viewControllerHandlerMapping();
|
||||
handlerMapping.setApplicationContext(webAppContext);
|
||||
AbstractHandlerMapping handlerMapping = (AbstractHandlerMapping) this.config.viewControllerHandlerMapping();
|
||||
handlerMapping.setApplicationContext(this.context);
|
||||
assertNotNull(handlerMapping);
|
||||
assertEquals(1, handlerMapping.getOrder());
|
||||
assertEquals(TestPathHelper.class, handlerMapping.getUrlPathHelper().getClass());
|
||||
@@ -117,17 +124,17 @@ public class WebMvcConfigurationSupportExtensionTests {
|
||||
HandlerExecutionChain handler = handlerMapping.getHandler(new MockHttpServletRequest("GET", "/path"));
|
||||
assertNotNull(handler.getHandler());
|
||||
|
||||
handlerMapping = (AbstractHandlerMapping) webConfig.resourceHandlerMapping();
|
||||
handlerMapping.setApplicationContext(webAppContext);
|
||||
handlerMapping = (AbstractHandlerMapping) this.config.resourceHandlerMapping();
|
||||
handlerMapping.setApplicationContext(this.context);
|
||||
assertNotNull(handlerMapping);
|
||||
assertEquals(Integer.MAX_VALUE-1, handlerMapping.getOrder());
|
||||
assertEquals(Integer.MAX_VALUE - 1, handlerMapping.getOrder());
|
||||
assertEquals(TestPathHelper.class, handlerMapping.getUrlPathHelper().getClass());
|
||||
assertEquals(TestPathMatcher.class, handlerMapping.getPathMatcher().getClass());
|
||||
handler = handlerMapping.getHandler(new MockHttpServletRequest("GET", "/resources/foo.gif"));
|
||||
assertNotNull(handler.getHandler());
|
||||
|
||||
handlerMapping = (AbstractHandlerMapping) webConfig.defaultServletHandlerMapping();
|
||||
handlerMapping.setApplicationContext(webAppContext);
|
||||
handlerMapping = (AbstractHandlerMapping) this.config.defaultServletHandlerMapping();
|
||||
handlerMapping.setApplicationContext(this.context);
|
||||
assertNotNull(handlerMapping);
|
||||
assertEquals(Integer.MAX_VALUE, handlerMapping.getOrder());
|
||||
handler = handlerMapping.getHandler(new MockHttpServletRequest("GET", "/anyPath"));
|
||||
@@ -137,10 +144,10 @@ public class WebMvcConfigurationSupportExtensionTests {
|
||||
@SuppressWarnings("unchecked")
|
||||
@Test
|
||||
public void requestMappingHandlerAdapter() throws Exception {
|
||||
RequestMappingHandlerAdapter adapter = webConfig.requestMappingHandlerAdapter();
|
||||
RequestMappingHandlerAdapter adapter = this.config.requestMappingHandlerAdapter();
|
||||
|
||||
// ConversionService
|
||||
String actual = webConfig.mvcConversionService().convert(new TestBean(), String.class);
|
||||
String actual = this.config.mvcConversionService().convert(new TestBean(), String.class);
|
||||
assertEquals("converted", actual);
|
||||
|
||||
// Message converters
|
||||
@@ -174,7 +181,7 @@ public class WebMvcConfigurationSupportExtensionTests {
|
||||
|
||||
@Test
|
||||
public void webBindingInitializer() throws Exception {
|
||||
RequestMappingHandlerAdapter adapter = webConfig.requestMappingHandlerAdapter();
|
||||
RequestMappingHandlerAdapter adapter = this.config.requestMappingHandlerAdapter();
|
||||
|
||||
ConfigurableWebBindingInitializer initializer = (ConfigurableWebBindingInitializer) adapter.getWebBindingInitializer();
|
||||
assertNotNull(initializer);
|
||||
@@ -192,7 +199,7 @@ public class WebMvcConfigurationSupportExtensionTests {
|
||||
MockHttpServletRequest request = new MockHttpServletRequest("GET", "/foo.json");
|
||||
NativeWebRequest webRequest = new ServletWebRequest(request);
|
||||
|
||||
ContentNegotiationManager manager = webConfig.requestMappingHandlerMapping().getContentNegotiationManager();
|
||||
ContentNegotiationManager manager = this.config.requestMappingHandlerMapping().getContentNegotiationManager();
|
||||
assertEquals(Arrays.asList(MediaType.APPLICATION_JSON), manager.resolveMediaTypes(webRequest));
|
||||
|
||||
request.setRequestURI("/foo.xml");
|
||||
@@ -211,33 +218,38 @@ public class WebMvcConfigurationSupportExtensionTests {
|
||||
|
||||
@Test
|
||||
public void exceptionResolvers() throws Exception {
|
||||
HandlerExceptionResolverComposite composite = (HandlerExceptionResolverComposite) webConfig.handlerExceptionResolver();
|
||||
assertEquals(1, composite.getExceptionResolvers().size());
|
||||
HandlerExceptionResolver exceptionResolver = this.config.handlerExceptionResolver();
|
||||
assertEquals(1, ((HandlerExceptionResolverComposite) exceptionResolver).getExceptionResolvers().size());
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@Test
|
||||
public void viewResolvers() throws Exception {
|
||||
ViewResolverComposite viewResolver = webConfig.viewResolverComposite();
|
||||
assertEquals(Ordered.LOWEST_PRECEDENCE, viewResolver.getOrder());
|
||||
ViewResolverComposite viewResolver = (ViewResolverComposite) this.config.mvcViewResolver();
|
||||
assertEquals(Ordered.HIGHEST_PRECEDENCE, viewResolver.getOrder());
|
||||
List<ViewResolver> viewResolvers = viewResolver.getViewResolvers();
|
||||
DirectFieldAccessor viewResolverFieldAccessor = new DirectFieldAccessor(viewResolvers.get(0));
|
||||
|
||||
DirectFieldAccessor accessor = 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");
|
||||
assertFalse((Boolean) accessor.getPropertyValue("useNotAcceptableStatusCode"));
|
||||
assertNotNull(accessor.getPropertyValue("contentNegotiationManager"));
|
||||
|
||||
List<View> defaultViews = (List<View>)accessor.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");
|
||||
|
||||
viewResolvers = (List<ViewResolver>)accessor.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"));
|
||||
accessor = new DirectFieldAccessor(viewResolvers.get(0));
|
||||
assertEquals("/", accessor.getPropertyValue("prefix"));
|
||||
assertEquals(".jsp", accessor.getPropertyValue("suffix"));
|
||||
}
|
||||
|
||||
|
||||
@Controller
|
||||
private static class TestController {
|
||||
|
||||
@@ -339,9 +351,9 @@ public class WebMvcConfigurationSupportExtensionTests {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void configureViewResolution(ViewResolutionRegistry registry) {
|
||||
public void configureViewResolvers(ViewResolverRegistry registry) {
|
||||
registry.enableContentNegotiation(new MappingJackson2JsonView());
|
||||
registry.jsp("/", ".jsp");
|
||||
registry.contentNegotiating().useNotAcceptable(false).defaultViews(new MappingJackson2JsonView());
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -353,7 +365,6 @@ public class WebMvcConfigurationSupportExtensionTests {
|
||||
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
|
||||
configurer.enable("default");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private class TestPathHelper extends UrlPathHelper {}
|
||||
|
||||
@@ -49,7 +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.ViewResolverComposite;
|
||||
import org.springframework.web.servlet.view.ViewResolverComposite;
|
||||
import org.springframework.web.servlet.handler.AbstractHandlerMapping;
|
||||
import org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping;
|
||||
import org.springframework.web.servlet.handler.ConversionServiceExposingInterceptor;
|
||||
@@ -207,8 +207,8 @@ public class WebMvcConfigurationSupportTests {
|
||||
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());
|
||||
List<ViewResolver> resolvers = compositeResolver.getViewResolvers();
|
||||
assertEquals(0, resolvers.size());
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
Reference in New Issue
Block a user