2011-03-20 14 views
6

मेरे पास एक वेब ऐप है कि हम बस इस समय आरईएसटी सेवाओं के लिए वसंत एमवीसी लगा रहे हैं, वसंत एमवीसी प्रेषक ठीक से काम करने के लिए नहीं मिल सकता है।यूआरएल पैटर्न एक पथ है

कोई मैपिंग नाम के साथ 'स्प्रिंग MVC डिस्पैचर DispatcherServlet में यूआरआई [/ MyApp/बाकी/testSvc/संदेश] के साथ HTTP अनुरोध नहीं मिला: हम पर हम पाते हैं जब मैं इस सेट हमारे बाकी सेवाओं ${contextPath}/rest/** के तहत प्रदर्शित करना चाहते हैं हालांकि, सर्वलेट '

मेरे web.xml है:

<servlet> 
    <servlet-name>Spring MVC Dispatcher Servlet</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <init-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value> 
     /WEB-INF/spring/servlet-context.xml 
    </param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

<servlet-mapping> 
    <servlet-name>Spring MVC Dispatcher Servlet</servlet-name> 
    <url-pattern>/rest</url-pattern> 
</servlet-mapping> 

servlet-context.xml है, जो ठीक है और सेवाओं को पंजीकृत किया गया है के रूप में वे स्टार्टअप पर पंजीकृत मिलता है। करने के लिए * .rest और messagemessage.rest लिए यह काम करता है के लिए मेरे अनुरोध-मानचित्रण

@Controller 
@RequestMapping(value = "/rest/testService") 
public class TestREST { 
    @RequestMapping(value="message", method=RequestMethod.GET) 
    public @ResponseBody String getMessage() { 
     return "REST working"; 
    } 

अगर मैं web.xml में url-pattern cahnge:

<context:component-scan base-package="com.mycompany.myapp.rest" /> 
<mvc:annotation-driven /> 

मेरे नियंत्रक के रूप में निम्नानुसार लग रहा है।

+0

क्या आपने '/ rest *' कोशिश की? –

+0

मुझे लगा कि यह ऐसा कुछ भी हो सकता है, हालांकि दुर्भाग्यवश यह मामला नहीं है, सर्वलेट वास्तव में अनुरोध प्राप्त कर रहा है, यही कारण है कि यह लॉग हो जाता है, हालांकि यह सही ढंग से मेल नहीं खाता है। –

उत्तर

25

समस्या यह है कि आपने /rest उपसर्ग दोनों web.xml और @RequestMapping में दोहराया है। यह एक या दोनों में होना चाहिए, लेकिन दोनों नहीं, उदा।

<url-pattern>/rest</url-pattern> 

और

@RequestMapping(value = "/testService") 

पथ जिस पर @RequestMapping संचालित रास्ता है कि सर्वलेट हिस्सा इस प्रकार के कुछ हिस्सों हैं, और आपके web.xml/path के रूप में सर्वलेट भाग को परिभाषित करता है, इसलिए जो कुछ के खिलाफ @RequestMapping मैचों छोड़ दिया है , यानी /testService

अपने वर्तमान रूप में, @RequestMapping वास्तव में {contextPath}/rest/rest/testService के विरुद्ध मेल खाता है।

+3

चीयर्स साथी, मैंने कोशिश की लेकिन इसे काम करने में नहीं मिला, समस्या क्यों है कि मेरे पास '/बाकी' है, इसे '/ rest/*' में बदल दिया गया है और यह अभी ठीक काम कर रहा है। तो दोनों का संयोजन मेरे साथ खराब हो रहा था। बहुत बहुत धन्यवाद। –

+0

क्या इसके बारे में डॉक्यूमेंटेशन में कोई स्रोत हैं? – dhblah

7

शायद आप <url-pattern>/rest/*</url-pattern> या <url-pattern>/rest*</url-pattern पर बदलने का प्रयास कर सकते हैं> और देखें कि क्या इससे मदद मिलती है।

+0

दुर्भाग्यवश यह भी काम नहीं करता है। मैं बता सकता हूं कि प्रेषक अनुरोध प्राप्त कर रहा है क्योंकि यह त्रुटि लॉगिंग कर रहा है। मुझे लगता है कि अगर यह अनुरोध प्राप्त नहीं हुआ है तो यह सही नहीं होगा?/बाकी * servlet के माध्यम से नहीं मिलता है, हालांकि/आराम/* करता है। –

+1

यह बताता है कि स्काफमैन के जवाब के साथ संयोजन में '/ rest/*' आवश्यक है, मैंने इसके लिए आपको वोट दिया, धन्यवाद साथी। –

संबंधित मुद्दे