स्प्रिंग का मानना है कि अंतिम बिंदु के पीछे कुछ भी एक फ़ाइल एक्सटेंशन है जैसे कि .json
या .xml
अपने पैरामीटर को पुनः प्राप्त करने के लिए इसे छोटा करें।
इसलिए यदि आपके पास /somepath/{variable}
:
/somepath/param
, /somepath/param.json
, /somepath/param.xml
या /somepath/param.anything
मूल्य के साथ एक परम में परिणाम होगाparam
/somepath/param.value.json
, /somepath/param.value.xml
या /somepath/param.value.anything
मूल्य के साथ एक परम में परिणाम होगाparam.value
यदि आप अपनी मैपिंग को /somepath/{variable:.+}
सुझाव के अनुसार बदलते हैं , तो किसी भी बिंदु सहित, अंतिम को आपके पैरामीटर के हिस्से के रूप में माना जाएगा:
/somepath/param
मूल्य के साथ एक परम में परिणाम होगा param
/somepath/param.json
मूल्य के साथ एक परम में परिणाम होगा param.json
/somepath/param.xml
मूल्य के साथ एक परम में परिणाम होगा param.xml
/somepath/param.anything
मूल्य के साथ एक परम में परिणाम होगा param.anything
/somepath/param.value.json
मूल्य के साथ एक परम में परिणाम होगा param.value.json
- ...
यदि आपको विस्तार मान्यता की परवाह नहीं है, तो आप इसे mvc:annotation-driven
स्वचालित रूप से ओवरराइड करके अक्षम कर सकते हैं :
<bean id="handlerMapping"
class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping">
<property name="contentNegotiationManager" ref="contentNegotiationManager"/>
<property name="useSuffixPatternMatch" value="false"/>
</bean>
तो, फिर से, यदि आपके पास है /somepath/{variable}
:
/somepath/param
, /somepath/param.json
, /somepath/param.xml
या /somepath/param.anything
मूल्य के साथ एक परम में परिणाम होगाparam
/somepath/param.value.json
, /somepath/param.value.xml
या /somepath/param.value.anything
मूल्य के साथ एक परम में परिणाम होगाparam.value
नोट: डिफ़ॉल्ट कॉन्फ़िगरेशन से अंतर केवल तभी दिखाई देता है, जब आपके पास मैपिंग जैसा हो somepath/something.{variable}
। Resthub परियोजना मुद्दा देखें
यदि आप एक्सटेंशन प्रबंधन रखना चाहते हैं, तो स्प्रिंग 3.2 के बाद से आप प्रत्ययपार्टनर मान्यता को सक्रिय रखने के लिए, लेकिन पंजीकृत एक्सटेंशन तक सीमित रखने के लिए RequestMappingHandlerMapping सेम की उपयोग की जा सकती है।
यहाँ आप केवल json और xml एक्सटेंशन को परिभाषित करते हैं:
<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: एनोटेशन-चालित अब एक कस्टम बीन प्रदान करने के लिए एक कंटेंटनॉग्रेशन विकल्प को स्वीकार करता है, लेकिन RequestMappingHandlerMapping की संपत्ति को सही (डिफ़ॉल्ट झूठ) में बदलना होगा (cf. https://jira.pringsource.org/browse/SPR-7632-76 )।
उस कारण से, आपको अभी भी सभी mvc: एनोटेशन-चालित कॉन्फ़िगरेशन को ओवरराइड करना होगा। मैंने एक कस्टम अनुरोध करने के लिए स्प्रिंग के लिए एक टिकट खोला है । MappingHandlerMapping: https://jira.springsource.org/browse/SPR-11253 । कृपया वोट करें यदि आप में intereted हैं।
ओवरराइड करते समय, कस्टम एक्ज़ीक्यूशन मैनेजमेंट ओवरराइडिंग पर भी विचार करने के लिए सतर्क रहें। अन्यथा, आपके सभी कस्टम अपवाद मैपिंग विफल हो जाएंगे। आपको सूची बीन के साथ संदेश भेजने वालों का पुन: उपयोग करना होगा:
<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>
मैंने ओपन सोर्स प्रोजेक्ट रेस्टहब में लागू किया है जिसका मैं हिस्सा हूं, इन विषयों पर परीक्षण का एक सेट: https://github.com/resthub/resthub-spring-stack/pull/219/files & https: // देखें। github.com/resthub/resthub-spring-stack/issues/217