Spring, son noktanın arkasındaki herhangi bir şeyin .jsonveya gibi bir dosya uzantısı olduğunu .xmldüşünür ve parametrenizi almak için bu öğeyi tructe eder.
Eğer varsa /somepath/{variable}:
/somepath/param, /somepath/param.json, /somepath/param.xmlYa da /somepath/param.anythingbir değere sahip bir param sonuçlanırparam
/somepath/param.value.json, /somepath/param.value.xmlYa da /somepath/param.value.anythingbir değere sahip bir param sonuçlanırparam.value
eşlemenizi /somepath/{variable:.+}önerilen şekilde değiştirirseniz , sonuncusu da dahil olmak üzere herhangi bir nokta parametrenizin bir parçası olarak kabul edilir:
/somepath/param değeri olan bir param ile sonuçlanacak param
/somepath/param.json değeri olan bir param ile sonuçlanacak param.json
/somepath/param.xml değeri olan bir param ile sonuçlanacak param.xml
/somepath/param.anything değeri olan bir param ile sonuçlanacak param.anything
/somepath/param.value.json değeri olan bir param ile sonuçlanacak param.value.json
- ...
Uzantı tanımayı önemsemiyorsanız, mvc:annotation-drivenotomajik özelliği geçersiz kılarak devre dışı bırakabilirsiniz :
<bean id="handlerMapping"
class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping">
<property name="contentNegotiationManager" ref="contentNegotiationManager"/>
<property name="useSuffixPatternMatch" value="false"/>
</bean>
Yani, yine, eğer varsa /somepath/{variable}:
/somepath/param, /somepath/param.json, /somepath/param.xmlYa da /somepath/param.anythingbir değere sahip bir param sonuçlanırparam
/somepath/param.value.json, /somepath/param.value.xmlYa da /somepath/param.value.anythingbir değere sahip bir param sonuçlanırparam.value
not: varsayılan yapılandırmadan farkı yalnızca benzer bir eşlemeniz varsa görünür somepath/something.{variable}. bkz Resthub proje sorunu
eklenti yönetimini korumak istiyorsanız, Bahar 3.2'den bu yana sonekPattern tanıma özelliğini etkinleştirilmiş ancak kayıtlı uzantıyla sınırlı tutmak için RequestMappingHandlerMapping bean'un useRegisteredSuffixPatternMatch özelliğini de ayarlayabilirsiniz.
Burada yalnızca json ve xml uzantılarını tanımlarsınız:
<bean id="handlerMapping"
class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping">
<property name="contentNegotiationManager" ref="contentNegotiationManager"/>
<property name="useRegisteredSuffixPatternMatch" value="true"/>
</bean>
<bean id="contentNegotiationManager" class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean">
<property name="favorPathExtension" value="false"/>
<property name="favorParameter" value="true"/>
<property name="mediaTypes">
<value>
json=application/json
xml=application/xml
</value>
</property>
</bean>
Mvc: ek açıklamaya dayalı özel bir fasulye sağlamak için artık bir contentNegotiation seçeneğini kabul ettiğini, ancak RequestMappingHandlerMapping özelliğinin true (varsayılan false) olarak değiştirilmesi gerektiğini unutmayın (bkz. Https://jira.springsource.org/browse/SPR-7632 ).
Bu nedenle, tüm mvc: ek açıklamaya dayalı yapılandırmayı geçersiz kılmanız gerekir. Özel bir RequestMappingHandlerMapping istemek için Spring'e bir bilet açtım: https://jira.springsource.org/browse/SPR-11253 . Eğer intereted iseniz oy verin.
Geçersiz kılma sırasında, özel Yürütme yönetimini geçersiz kılmayı da göz önünde bulundurun. Aksi takdirde, tüm özel İstisna eşlemeleriniz başarısız olur. İletiyi bir liste çekirdeği ile yeniden kullanmanız gerekecek:
<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean" />
<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean" />
<util:list id="messageConverters">
<bean class="your.custom.message.converter.IfAny"></bean>
<bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter"></bean>
<bean class="org.springframework.http.converter.StringHttpMessageConverter"></bean>
<bean class="org.springframework.http.converter.ResourceHttpMessageConverter"></bean>
<bean class="org.springframework.http.converter.xml.SourceHttpMessageConverter"></bean>
<bean class="org.springframework.http.converter.xml.XmlAwareFormHttpMessageConverter"></bean>
<bean class="org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter"></bean>
<bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"></bean>
</util:list>
<bean name="exceptionHandlerExceptionResolver"
class="org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver">
<property name="order" value="0"/>
<property name="messageConverters" ref="messageConverters"/>
</bean>
<bean name="handlerAdapter"
class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
<property name="webBindingInitializer">
<bean class="org.springframework.web.bind.support.ConfigurableWebBindingInitializer">
<property name="conversionService" ref="conversionService" />
<property name="validator" ref="validator" />
</bean>
</property>
<property name="messageConverters" ref="messageConverters"/>
</bean>
<bean id="handlerMapping"
class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping">
</bean>
Bir parçası olduğum açık kaynak projesi Resthub'da bu konularda bir dizi test uyguladım : bkz. Https://github.com/resthub/resthub-spring-stack/pull/219/files & https: // github.com/resthub/resthub-spring-stack/issues/217