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 @@
+
+
+
+
+