2011-11-23 18 views
12

मुझे पता नहीं है कि यह इस साइट के लिए एक वैध सवाल है, लेकिन मैं सोच रहा था कि अगर कोई ContentNegotiatingViewResolver के साथ अनुभव करता है तो यह देख सकता है और अगर मैं इसे सही तरीके से सेट करता हूं और अच्छी तरह से 404 संदेश भेजने में मदद करता हूं तो मुझे बताएं।क्या मेरी स्प्रिंग-एमवीसी सामग्री हैगोशिएटिंगव्यू रीसोलॉल्वर सेटअप सही ढंग से है? असमर्थित मीडिया प्रकारों के लिए मैं 404 त्रुटि कैसे भेज सकता हूं?

मैं जो करना चाहता हूं वह HTML प्रस्तुति के लिए कोई एक्सटेंशन डिफ़ॉल्ट नहीं है (जो मेरे मामले में फ्रीमार्कर दृश्य है)। मैं इसके बजाय जेसन को प्रस्तुत करने के लिए ".json" के साथ यूआरएल स्वीकार करना चाहता हूं। यह फ़ायरफ़ॉक्स, यानी क्रोम में काम करता प्रतीत होता है। मुझे लगता है कि यह अन्य ब्राउज़रों में काम करता है? मैंने स्वीकृति हेडर को अक्षम करना सुनिश्चित किया क्योंकि यह एक बुरी सुविधा है जो वास्तव में दस्तावेज़ीकरण की तरह काम नहीं करती है।

मैंने ".stuff" के साथ यूआरएल तक पहुंचने का प्रयास किया है, यह देखने के लिए कि क्या होता है, और मेरी कॉन्फ़िगरेशन के साथ, एक खाली स्क्रीन होती है। क्या यह स्वीकार्य है? क्या कोई तरीका है कि मैं 404 त्रुटि भेज सकता हूं?

क्या कोई और चीज है जिसे मैंने सही तरीके से कॉन्फ़िगर नहीं किया हो सकता है?

<bean id="contentNegotiatingViewResolver" 
     class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver"> 
    <property name="order" value="1"/> 
    <property name="ignoreAcceptHeader" value="true" /> 
    <property name="defaultContentType" value="text/html" /> 
    <property name="mediaTypes"> 
     <map> 
      <entry key="json" value="application/json"/> 
     </map> 
    </property> 
    <property name="useNotAcceptableStatusCode" value="true" /> 
    <property name="defaultViews"> 
     <list> 
      <bean class="org.springframework.web.servlet.view.json.MappingJacksonJsonView"> 
       <property name="contentType" value="application/json" /> 
      </bean> 
     </list> 
    </property> 
    <property name="viewResolvers"> 
     <list> 
      <bean class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver"> 
       <property name="contentType" value="text/html" /> 
       <property name="order" value="2"/> 
       <property name="cache" value="true"/> 
       <property name="prefix" value=""/> 
       <property name="suffix" value=".ftl"/> 
       <property name="exposeSpringMacroHelpers" value="true"/> 
      </bean> 
     </list> 
    </property> 
</bean> 

उत्तर

1

क्योंकि आप defaultContentType सेट है, बातचीत हमेशा ऊपर freemarker दृश्य द्वारा दिया उससे मिलते-जुलते सामग्री प्रकार की खोज समाप्त होता है। ContentNegotiatingViewResolver की जावाडोक से एक उद्धरण:

तुम भी सीधे setDefaultContentType सेट कर सकते हैं, जो हो जाएगा लौटे जब अन्य तंत्र (हेडर, फाइल एक्सटेंशन या पैरामीटर स्वीकार करें) एक मैच का परिणाम नहीं है।

इस सेटिंग के साथ, फ़ाइल एक्सटेंशन। स्टफ सामग्री से मेल खाता है टेक्स्ट/एचटीएमएल टाइप करें।

फिर, useNotAcceptableStatusCode साथ: अगर कोई मुकाबला नहीं पाया है

406 (स्वीकार्य नहीं) स्थिति कोड लौटा दी जाएगी।

मैं सिर्फ यह (एक और बाकी सेवा अनुप्रयोग के सेटिंग्स के साथ) की कोशिश की और देखा क्रोम संदेश दिखाने: संसाधन इस अनुरोध से पहचान विशेषताओं अनुरोध के अनुसार स्वीकार्य नहीं के साथ प्रतिक्रियाओं पैदा करने में ही सक्षम है "स्वीकार" हेडर()।

0

क्या आपने ".stuff" के लिए url-pattern को web.xml में जोड़ा था? मैं PathExtensionContentNegotiationStrategy का उपयोग कर रहा हूं, लेकिन एक ही कारण होना चाहिए। चूंकि वसंत सर्वलेट इस अनुरोध का जवाब नहीं दे सकता है, इसलिए 404 त्रुटि मिली, 500 या 416 नहीं। यदि 416 है, तो इसे कुछ शीर्षलेख होना चाहिए, जो jQuery सीटिंग या http क्लाइंट हेडर बदलकर तय किया जा सकता है।