2011-01-14 8 views
7

स्टैक   ओवरफ्लो पर इस त्रुटि से संबंधित कई प्रश्न हैं, और मैंने सफलता के बिना सबसे प्रासंगिक लोगों के समाधानों का प्रयास किया है। मेरी समस्या यहाँ है।स्प्रिंग एमवीसी - अनुरोध के लिए कोई मैपिंग नहीं मिली यूआरआई

मैं इस अनुरोध को मैप करने की कोशिश कर रहा हूं: /user/{userId} जहां userId एक स्ट्रिंग है।

UserController.java

@Controller 
@RequestMapping("/user") 
public class UserController { 
    private static final Logger log = Logger.getLogger(UserController.class.getName()); 

    @RequestMapping(method=RequestMethod.GET) 
    public @ResponseBody String info() { 
     log.debug("mapping succeeded!"); 
     return "<H1>foo</H1>"; 
    } 
} 

वेब/वेब-INF/उपयोगकर्ता के servlet.xml

: मैं निम्नलिखित एनोटेट वर्ग और Spring विन्यास के साथ /user लिए अनुरोध प्राप्त संभाल करने में सक्षम हूँ
<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:p="http://www.springframework.org/schema/p" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xsi:schemaLocation=" 
     http://www.springframework.org/schema/beans 
     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
     http://www.springframework.org/schema/context 
     http://www.springframework.org/schema/context/spring-context-3.0.xsd"> 

    <context:component-scan base-package="com.example"/> 
</beans> 

web.xml

<servlet> 
    <servlet-name>user</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>user</servlet-name> 
    <url-pattern>/user/*</url-pattern> 
</servlet-mapping> 

फिर जब मैं /user

2011-01-14 15:47:41,942 DEBUG [com.example.rest.UserController] (http-11080-1) mapping succeeded! 

का अनुरोध अब कुछ दिलचस्प करने के लिए। मैं निम्नलिखित करने के लिए अपने कोड बदलने के लिए:

@Controller 
@RequestMapping("/user") 
public class UserController { 
    private static final Logger log = Logger.getLogger(UserController.class.getName()); 

    @RequestMapping(value="/{userId}", method=RequestMethod.GET) 
    public @ResponseBody String info(@PathVariable String userId) { 
     log.debug("mapping succeeded! userId=" + userId); 
     return "<H1>foo</H1>"; 
    } 
} 

मैं खतरनाक गलत No mapping found...

(main) Pre-instantiating singletons in  org.s[email protected]36598d00: defining beans  [userController,org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor]; root of factory hierarchy 
(main) instantiating UserController 
(main) Mapped URL path [/user/*] onto handler 'userController' 
(main) Mapped URL path [/user/*.*] onto handler 'userController' 
(main) Mapped URL path [/user/*/] onto handler 'userController' 

... 

(http-11080-1) No mapping found for HTTP request with URI [/user] in DispatcherServlet with name 'user' 
(http-11080-1) No mapping found for HTTP request with URI [/user/foo] in DispatcherServlet with name 'user' 
(http-11080-1) No mapping found for HTTP request with URI [/user/] in DispatcherServlet with name 'user' 

मैं क्या कर रहा हूँ है?

उत्तर

9

आप आमतौर पर वास्तविक सर्वलेट पथ शामिल नहीं करते हैं जो आपके प्रेषक सर्वलेट को आपके अनुरोध मैपिंग के हिस्से के रूप में मैप किया गया है। अनुरोध मैपिंग प्रेषक के सापेक्ष है। अपमानजनक पहले मामले में प्रेषक आपके पास जो कुछ मतलब था उसे समझने के लिए पर्याप्त स्मार्ट है, लेकिन जब आप पथ चर को जोड़ना शुरू करते हैं जो टूट जाता है। आपको अपने वर्तमान सेटअप के साथ /user/user/foo तक पहुंचने में सक्षम होना चाहिए और आप जो खोज रहे हैं उसे प्राप्त कर सकते हैं।

+2

यह हल हो गया! मैं इस बात पर स्पष्ट नहीं हूं कि यह कैसे काम करता है: अनुरोध/उपयोगकर्ता और/उपयोगकर्ता/उपयोगकर्ता उपयोगकर्ता आईडी = उपयोगकर्ता दोनों के परिणामस्वरूप। क्यूं कर? – purecharger

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