Spring, son noktanın arkasındaki herhangi bir şeyin .json
veya gibi bir dosya uzantısı olduğunu .xml
düşünür ve parametrenizi almak için bu öğeyi tructe eder.
Eğer varsa /somepath/{variable}
:
/somepath/param
, /somepath/param.json
, /somepath/param.xml
Ya da /somepath/param.anything
bir değere sahip bir param sonuçlanırparam
/somepath/param.value.json
, /somepath/param.value.xml
Ya da /somepath/param.value.anything
bir 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-driven
otomajik ö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.xml
Ya da /somepath/param.anything
bir değere sahip bir param sonuçlanırparam
/somepath/param.value.json
, /somepath/param.value.xml
Ya da /somepath/param.value.anything
bir 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