2011-03-28 13 views
16

मैं स्प्रिंग एमवीसी 3 का उपयोग कर रहा हूं और मुझे एक यूआरएल मैपिंग के साथ कोई समस्या है। मैं एक विधिस्प्रिंग एमवीसी यूआरएल मैपिंग डीबग कैसे करें?

@Controller 
public class DocumentController { 
     @RequestMapping(value="/docs/pupil/classes/{courseCategoryType}", method=RequestMethod.GET) 
     public ModelAndView listClassesForPupil(@PathVariable("courseCategoryType") final String courseCategoryType){ 
      System.err.print("\n\n\n\t\t--- XXXXX ---\n\n\n"); 
     } 
} 

मैं Spring URI template syntax उपयोग करने के लिए कोशिश कर रहा हूँ, और मुझे लगता है कि कंसोल में क्योंकि मैप किया जा रहा है मैं देख रहा हूँ पता है:

11:22:12,108 INFO DefaultAnnotationHandlerMapping:411 - Mapped URL path [/docs/pupil/classes/{courseCategoryType}] onto handler 'documentController' 
11:22:12,108 INFO DefaultAnnotationHandlerMapping:411 - Mapped URL path [/docs/pupil/classes/{courseCategoryType}.*] onto handler 'documentController' 
11:22:12,108 INFO DefaultAnnotationHandlerMapping:411 - Mapped URL path [/docs/pupil/classes/{courseCategoryType}/] onto handler 'documentController' 

हालांकि, जब मैं ब्राउज़र में URL https://localhost/docs/pupil/classes/ACADEMIC दर्ज मैं 404 त्रुटि प्राप्त करें और मुझे कंसोल में मुद्रित कुछ भी दिखाई नहीं देता है। मैंने प्रिंट आउट कोड को प्रतिस्थापित किया जो सिर्फ एक अपवाद फेंकता है, और ऐसा लगता है कि इसे फेंक दिया नहीं गया है। एक सहकर्मी ने सुझाव दिया कि यूआरएल रिज़ॉल्यूशन कैसे किया जा रहा है, यह देखने का एक तरीका होना चाहिए लेकिन Google search कुछ भी चालू नहीं लग रहा था।

इस पर डीबग करने के तरीके के बारे में कोई सुझाव?

+0

त्वरित जांच: अन्य नियंत्रकों काम करते हैं? क्या आप वाकई संदर्भ पथ, 'डिस्पैचर सर्वलेट' के यूआरएल-पैटर्न इत्यादि में कोई समस्या नहीं हैं? – axtavt

+0

अन्य नियंत्रकों ने काम किया, और हमने इस विशेष मुद्दे को हल किया (मैंने बताया कि फ्रंट नियंत्रक के लिए सभी * * बीएफ अनुरोधों को अनदेखा करने के लिए फ़िल्टर था) लेकिन मैंने सोचा कि यह प्रश्न अभी भी उपयोगी होगा क्योंकि मैं सक्षम होना चाहता हूं भविष्य में इस तरह के मुद्दों के मुद्दों को डीबग करने के लिए। – ArtB

उत्तर

7

इस मैं सबसे अच्छा "entrypoint" डीबगिंग शुरू करने के लिए की तरह लगता है कि समस्याओं के लिए DispatcherServlet की विधि getHandler(HttpServletRequest request) है।

इस विधि के अंदर प्रत्येक कॉन्फ़िगर किए गए HandlerMapping का निरीक्षण किया जाता है यदि यह आपके विशिष्ट अनुरोध को संभालने के लिए ज़िम्मेदार है। यदि आपका अनुरोध इसे अब तक बनाता है, तो आप निश्चित रूप से सुनिश्चित हो सकते हैं कि यह वसंत संदर्भ के अंदर एक कॉन्फ़िगरेशन समस्या है।

RequestMappingHandlerMapping (या DefaultAnnotationHandlerMapping) के हैंडलर के लिए देखें, यदि आप स्प्रिंग के पुराने संस्करण का उपयोग कर रहे हैं), तो ये आमतौर पर HandlerMapping एनोटेशन आधारित नियंत्रक कॉन्फ़िगरेशन द्वारा उपयोग किए जाते हैं।

अन्य मामले में, यह सुनिश्चित कर लें कुछ भी नहीं DispatcherServlet (आपके मामले में) की तरह आपके अनुरोधों को छानने

+0

इस सलाह के साथ शुरू किया लेकिन व्यक्तिगत रूप से पाया ['डूस्पैच (एचटीपीएसर्लेट रिवेस्ट, एचटीपीएसर्लेट रिस्पॉन्स) '] (https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/servlet/DispatcherServlet.html # doDispatch-javax.servlet.http.HttpServletRequest-javax.servlet.http.HttpServletResponse-) शुरू करने के लिए बेहतर जगह के रूप में। – ArtB

-2

आपका यूआरएल (https: // स्थानीय होस्ट/docs/छात्र/वर्गों/शैक्षणिक) appName याद आ रही है यह URL होना चाहिए, (https: // स्थानीय होस्ट/appName/docs/छात्र/वर्गों/शैक्षणिक)

0

अगर आप अपाचे पर एक https साइट पर होस्टिंग कर रहे हैं जो बैकएंड पर रीडायरेक्ट कर रहा है तो ऐपकॉन्टेक्स्ट गुम है। यह

https://localhost:8443//docs/छात्र/वर्गों की तरह कुछ शैक्षणिक

2

यह करने के लिए सटीक उत्तर लॉगिंग रूपरेखा है कि आप उपयोग कर रहे पर निर्भर करता है होना चाहिए /।

यदि आप org.springframework.web से DEBUG या TRACE के लिए लॉग स्तर सेट करते हैं तो वसंत एमवीसी अधिक विस्तृत जानकारी लॉग करेगा।

0

यदि आप एक्ट्यूएटर के साथ स्प्रिंग बूट का उपयोग करते हैं, तो मैपिंग एंडपॉइंट सभी @RequestMapping पथों की एकत्रित सूची दिखाएगा।

एंडपॉइंट्स के बारे में अधिक जानकारी के लिए http://docs.spring.io/spring-boot/docs/current/reference/html/production-ready-endpoints.html देखें।

ट्यूटोरियल के लिए https://spring.io/guides/gs/actuator-service/ देखें एक्ट्यूलेटर मॉड्यूल को कैसे शामिल करें। ग्रैडल के लिए, आपको केवल compile("org.springframework.boot:spring-boot-starter-actuator")

beans एंडपॉइंट भी उपयोगी है। यह सभी लोड बीन्स दिखाएगा। एचटीटीपी एंडपॉइंट लापता होने का संभावित कारण यह तथ्य है कि संबंधित बीन (मैपिंग) लोड नहीं किया गया था (क्योंकि वह घटक स्कैन पथ पर नहीं है)।

+1

यदि आप स्प्रिंग बूट एक्ट्यूएटर का उपयोग करते हैं, तो यह है। "स्टार्टर" निर्भरताओं में से कई इसमें शामिल नहीं हैं। – walen

0

आप अपने प्रवेश विन्यास (नीचे log4j उदाहरण) में CommonsRequestLoggingFilter के लिए एक लाइन जोड़ सकते हैं:

<logger name="org.springframework.web.filter.CommonsRequestLoggingFilter"> 
    <level value="DEBUG"/> 
</logger> 

यह इस तरह से पहले और प्रसंस्करण के बाद अपने यूआरआई प्रिंट होगा:

org.springframework.web.filter.CommonsRequestLoggingFilter - Before request [uri=/sendMail/D0000/14/en/?null] 
org.springframework.web.filter.CommonsRequestLoggingFilter - After request [uri=/sendMail/D0000/14/en/?null;payload={"to":["[email protected]"],"cc":[],"subject":"Test subject","body":null,"replacement":{"TITLE":"Test email","SERVER_NAME":"Whatever"},"attachments":{},"html":true}] 

यह वास्तव में है उपयोगी, हालांकि यह अस्तित्वहीन संसाधनों के लिए अनुरोध नहीं दिखाता है (जैसे 404 आपको मिल रहा है)।

सभी प्राप्त करने का एक और विकल्प, यदि आप स्प्रिंग बूट का उपयोग कर रहे हैं, तो टॉमकैट का access.log है।आप इस तरह से अपनी application.properties में सक्षम कर सकते हैं:

server.tomcat.accesslog.enabled = true 
0

मुझे लगता है कि आप क्रोम कंसोल/नेटवर्क पैनल से इस देख सकते हैं की "सामने" वहाँ है, की तुलना यूआरएल आपने

0

स्प्रिंग 4 और स्प्रिंग बूट - मुझे एप्लिकेशन.प्रोपर्टीज में DEBUG लॉगिंग सक्षम करने में क्या मदद मिली। ऐसा करने के लिए - बस जोड़ें:

logging.level.org.springframework.web = डीबग

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