Make RequestMappingHandlerMapping xml config easier

Prior to this commit, it was necessary to override
the HandlerMapping definition to change properties
like useSuffixPatternMatch, useSuffixPatternMatch...

This commits adds new attributes on the
mvc:annotation-driven XML tag that allows to configure
such flags:
* use-suffix-pattern-match
* use-trailing-slash-match
* use-registered-suffix-pattern-match

Issue: SPR-10163
This commit is contained in:
Brian Clozel
2014-01-03 23:29:12 +01:00
parent c1f3da082c
commit 96b418cc8a
5 changed files with 85 additions and 6 deletions

View File

@@ -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);

View File

@@ -255,6 +255,35 @@
]]></xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="use-suffix-pattern-match" type="xsd:boolean">
<xsd:annotation>
<xsd:documentation><![CDATA[
Whether to use suffix pattern match (".*") when matching patterns to requests. If enabled
a method mapped to "/users" also matches to "/users.*". The default value is true.
]]></xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="use-trailing-slash-match" type="xsd:boolean">
<xsd:annotation>
<xsd:documentation><![CDATA[
Whether to match to URLs irrespective of the presence of a trailing slash.
If enabled a method mapped to "/users" also matches to "/users/".
The default value is true.
]]></xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="use-registered-suffix-pattern-match" type="xsd:boolean">
<xsd:annotation>
<xsd:documentation><![CDATA[
Whether to use suffix pattern match for registered file extensions only when matching patterns to requests.
If enabled, a controller method mapped to "/users" also matches to "/users.json" assuming ".json" is a file extension registered with
the provided ContentNegotiationManager. This can be useful for allowing only specific URL extensions to be used as well as in cases
where a "." in the URL path can lead to ambiguous interpretation of path variable content, (e.g. given "/users/{user}" and incoming
URLs such as "/users/john.j.joe" and "/users/john.j.joe.json").
If enabled, this attribute also enables use-suffix-pattern-match. The default value is false.
]]></xsd:documentation>
</xsd:annotation>
</xsd:attribute>
</xsd:complexType>
</xsd:element>