diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/config/AnnotationDrivenBeanDefinitionParser.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/config/AnnotationDrivenBeanDefinitionParser.java index 7b4ceef94f..917f329615 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/config/AnnotationDrivenBeanDefinitionParser.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/config/AnnotationDrivenBeanDefinitionParser.java @@ -171,6 +171,19 @@ class AnnotationDrivenBeanDefinitionParser implements BeanDefinitionParser { Boolean enableMatrixVariables = Boolean.valueOf(element.getAttribute("enableMatrixVariables")); handlerMappingDef.getPropertyValues().add("removeSemicolonContent", !enableMatrixVariables); } + if(element.hasAttribute("use-suffix-pattern-match")) { + handlerMappingDef.getPropertyValues().add("useSuffixPatternMatch", + Boolean.valueOf(element.getAttribute("use-suffix-pattern-match"))); + } + if(element.hasAttribute("use-trailing-slash-match")) { + handlerMappingDef.getPropertyValues().add("useTrailingSlashMatch", + Boolean.valueOf(element.getAttribute("use-trailing-slash-match"))); + } + if(element.hasAttribute("use-registered-suffix-pattern-match")) { + handlerMappingDef.getPropertyValues().add("useRegisteredSuffixPatternMatch", + Boolean.valueOf(element.getAttribute("use-registered-suffix-pattern-match"))); + } + RuntimeBeanReference conversionService = getConversionService(element, source, parserContext); RuntimeBeanReference validator = getValidator(element, source, parserContext); diff --git a/spring-webmvc/src/main/resources/org/springframework/web/servlet/config/spring-mvc-4.0.xsd b/spring-webmvc/src/main/resources/org/springframework/web/servlet/config/spring-mvc-4.0.xsd index 985d54a584..99319837bb 100644 --- a/spring-webmvc/src/main/resources/org/springframework/web/servlet/config/spring-mvc-4.0.xsd +++ b/spring-webmvc/src/main/resources/org/springframework/web/servlet/config/spring-mvc-4.0.xsd @@ -255,6 +255,35 @@ ]]> + + + + + + + + + + + + + + + diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/config/AnnotationDrivenBeanDefinitionParserTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/config/AnnotationDrivenBeanDefinitionParserTests.java index 3f72adf22e..bb78a4d477 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/config/AnnotationDrivenBeanDefinitionParserTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/config/AnnotationDrivenBeanDefinitionParserTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2012 the original author or authors. + * 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. @@ -15,10 +15,6 @@ */ package org.springframework.web.servlet.config; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; - import java.util.List; import org.junit.Before; @@ -42,11 +38,16 @@ import org.springframework.web.method.support.ModelAndViewContainer; import org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping; import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter; import org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver; +import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping; import org.springframework.web.servlet.mvc.method.annotation.ServletWebArgumentResolverAdapter; +import static org.hamcrest.Matchers.*; +import static org.junit.Assert.*; + /** * Test fixture for the configuration in mvc-config-annotation-driven.xml. * @author Rossen Stoyanchev + * @author Brian Clozel */ public class AnnotationDrivenBeanDefinitionParserTests { @@ -70,6 +71,28 @@ public class AnnotationDrivenBeanDefinitionParserTests { assertEquals(false, new DirectFieldAccessor(adapter).getPropertyValue("ignoreDefaultModelOnRedirect")); } + @Test + public void testCustomContentNegotiationManager() { + loadBeanDefinitions("mvc-config-content-negotiation-manager.xml"); + RequestMappingHandlerMapping hm = appContext.getBean(RequestMappingHandlerMapping.class); + assertNotNull(hm); + assertTrue(hm.useSuffixPatternMatch()); + assertTrue(hm.useRegisteredSuffixPatternMatch()); + List fileExtensions = hm.getContentNegotiationManager().getAllFileExtensions(); + assertThat(fileExtensions, contains("xml")); + assertThat(fileExtensions, hasSize(1)); + } + + @Test + public void testRequestMappingCustomAttributes() { + loadBeanDefinitions("mvc-config-custom-attributes.xml"); + RequestMappingHandlerMapping hm = appContext.getBean(RequestMappingHandlerMapping.class); + assertNotNull(hm); + assertFalse(hm.getUrlPathHelper().shouldRemoveSemicolonContent()); + assertFalse(hm.useTrailingSlashMatch()); + assertFalse(hm.useSuffixPatternMatch()); + } + @Test public void testMessageConverters() { loadBeanDefinitions("mvc-config-message-converters.xml"); diff --git a/spring-webmvc/src/test/resources/org/springframework/web/servlet/config/mvc-config-content-negotiation-manager.xml b/spring-webmvc/src/test/resources/org/springframework/web/servlet/config/mvc-config-content-negotiation-manager.xml index 76fa653957..2f7a1a858a 100644 --- a/spring-webmvc/src/test/resources/org/springframework/web/servlet/config/mvc-config-content-negotiation-manager.xml +++ b/spring-webmvc/src/test/resources/org/springframework/web/servlet/config/mvc-config-content-negotiation-manager.xml @@ -5,7 +5,8 @@ xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> - + diff --git a/spring-webmvc/src/test/resources/org/springframework/web/servlet/config/mvc-config-custom-attributes.xml b/spring-webmvc/src/test/resources/org/springframework/web/servlet/config/mvc-config-custom-attributes.xml new file mode 100644 index 0000000000..07c64a54b0 --- /dev/null +++ b/spring-webmvc/src/test/resources/org/springframework/web/servlet/config/mvc-config-custom-attributes.xml @@ -0,0 +1,13 @@ + + + + +