2011-05-17 12 views
12

भीतर देखने का समाधान नहीं कर मैं अपने सर्वलेट से एक के लिए एक नई विधि/मानचित्रण जोड़ दिया है:स्प्रिंग सर्वलेट

@RequestMapping(value = "/user/prefs/order", method = RequestMethod.POST) 
public void updateUsersPrefs(@RequestBody Map<String, ArrayList> body, HttpServletRequest request) { 
    ... 
} 

लेकिन जब मैं इस यूआरएल करने का अनुरोध भेजने के साथ मैं एक 500 आंतरिक सर्वर त्रुटि मिलता है, निम्नलिखित त्रुटि संदेश:

javax.servlet.ServletException: Could not resolve view with name 'user/prefs/order' in servlet with name 'appfinder' 
    org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1029) 
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:817) 
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719) 
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644) 
    org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:560) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:710) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803) 

मैं अपने जीवन के लिए नहीं देख सकता कि यह क्यों रिपोर्ट किया जा रहा है। क्या कोई इसके लिए सहायता कर सकता है? मैं अब और जानकारी प्रदान कर सकता हूं जो मुझे प्रदान कर सकता है, कृपया मुझे बताएं।

धन्यवाद!

+2

, वांछित दृश्य नाम के साथ एक स्ट्रिंग वापसी का प्रयास करें। अन्य विकल्प हैं। – DwB

उत्तर

31

स्प्रिंग व्यवहार करता है void वापसी प्रकार के साथ @RequestMapping तरीकों in the following manner:

void - अगर विधि (सीधे प्रतिक्रिया सामग्री लेखन, उस उद्देश्य के लिए प्रकार ServletResponse/HttpServletResponse की एक बहस की घोषणा के द्वारा प्रतिक्रिया ही संभालती है) या यदि व्यू नाम को RequestToViewNameTranslator (हैंडलर विधि हस्ताक्षर में प्रतिक्रिया तर्क घोषित नहीं) के माध्यम से पूर्ण रूप से निर्धारित किया जाना चाहिए।

इसलिए क्योंकि वहाँ है इस विधि के लिए कोई HttpServletResponse पैरामीटर, स्प्रिंग मानता है कि आप दृश्य का नाम एक RequestToViewNameTranslator के माध्यम से निर्धारित किया जा करना चाहते हैं।

आप तो the default implementation kicks in which will अपने संदर्भ में उपयोग करने, एक विशेष RequestToViewNameTranslator निर्दिष्ट नहीं करते हैं:

बस एक दृश्य के नाम में भेजे अनुरोध के URI बदल देती है।

आप आने वाले अनुरोध के URI दृश्य नाम के रूप में इस्तेमाल किया जा नहीं करना चाहते हैं, तो आप कुछ ही विकल्प हैं:

  1. कॉन्फ़िगर व्यवहार के साथ एक कस्टम RequestToViewNameTranslator आप
  2. चाहते हैं
  3. इस विधि के लिए HttpServletResponse पैरामीटर जोड़ें यदि आप रिज़ॉल्यूशन व्यू के बजाय सीधे प्रतिक्रिया पर लिखना चाहते हैं।
  4. इस विधि का रिटर्न प्रकार String, View, or ModelAndView` को विधि निर्दिष्ट करने या विधि के भीतर नाम देखने में सक्षम होने के लिए बदलें।
+2

आपके पास एक छोटा टाइपो है: "इसलिए चूंकि कोई 'HttpServletRequest'" होना चाहिए "इसलिए चूंकि कोई' HttpServlet * Response *' –

+0

@ कोस्टी धन्यवाद नहीं है, निश्चित –

+0

यह ठीक है, बहुत धन्यवाद! – MeanwhileInHell

4

मुझे यह समस्या थी, और कारण मैं टाइल्स फ्रेमवर्क का उपयोग कर रहा था और टाइल्स-def.xml में दृश्य नाम का उल्लेख नहीं किया था। टाइल्स-def.xml को कॉन्फ़िगर करने के बाद समस्या हल हो गई थी।

2

मुझे यह समस्या भी थी। मैंने इसे @ResponseBody एनोटेशन का उपयोग करके हल किया।

इस तरह

:

@RequestMapping(value = "/user/prefs/order", method = RequestMethod.POST) 
@ResponseBody 
public void updateUsersPrefs(@RequestBody Map<String, ArrayList> body, HttpServletRequest request) { 
    ... 
} 
एक शून्य वापसी के बजाय
संबंधित मुद्दे