शायद आपको यह जानने की जरूरत है कि कैसे यूरल्स की मैपिंग की जाती है, क्योंकि मैं 404
घंटों तक पीड़ित हूं । अनुरोधों को संभालने वाले दो प्रकार के हैं। BeanNameUrlHandlerMapping
और SimpleUrlHandlerMapping
। जब हमने एक परिभाषित किया servlet-mapping
, हम उपयोग कर रहे हैं SimpleUrlHandlerMapping
। एक बात जो हमें जाननी चाहिए, वह यह है कि इन दो हैंडलर में एक आम संपत्ति होती है जिसे alwaysUseFullPath
डिफॉल्ट कहा जाता हैfalse
।
false
यहाँ का अर्थ है कि स्प्रिंग एक नियंत्रक को एक यूआरएल मैप करने के लिए पूर्ण पथ का उपयोग नहीं करेगा। इसका क्या मतलब है? इसका मतलब है जब आप एक परिभाषित करते हैं servlet-mapping
:
<servlet-mapping>
<servlet-name>viewServlet</servlet-name>
<url-pattern>/perfix/*</url-pattern>
</servlet-mapping>
हैंडलर वास्तव *
में नियंत्रक को खोजने के लिए भाग का उपयोग करेगा । उदाहरण के लिए, निम्न नियंत्रक 404
त्रुटि का सामना करेंगे जब आप इसका उपयोग करने का अनुरोध करेंगे/perfix/api/feature/doSomething
@Controller()
@RequestMapping("/perfix/api/feature")
public class MyController {
@RequestMapping(value = "/doSomething", method = RequestMethod.GET)
@ResponseBody
public String doSomething(HttpServletRequest request) {
....
}
}
यह एक सही मैच है, है ना? लेकिन क्यों 404
। जैसा कि पहले उल्लेख किया गया है, डिफ़ॉल्ट मान alwaysUseFullPath
गलत है, जिसका अर्थ है कि आपके अनुरोध में, केवल /api/feature/doSomething
एक संबंधित नियंत्रक खोजने के लिए उपयोग किया जाता है, लेकिन उस पथ के बारे में कोई नियंत्रक परवाह नहीं करता है। आपको या तो अपने url को बदलने /perfix/perfix/api/feature/doSomething
या perfix
MyController आधार से हटाने की आवश्यकता है @RequestingMapping
।