शायद आपको यह जानने की जरूरत है कि कैसे यूरल्स की मैपिंग की जाती है, क्योंकि मैं 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या perfixMyController आधार से हटाने की आवश्यकता है @RequestingMapping।