2016-06-10 7 views
10

निम्नलिखित मानचित्रण पर विचार करें:जावा स्प्रिंग - कैसे लापता आवश्यक अनुरोध को पूरा करने पैरामीटर

@RequestMapping(value = "/superDuperPage", method = RequestMethod.GET) 
public String superDuperPage(@RequestParam(value = "someParameter", required = true) String parameter) 
{ 
    return "somePage"; 
} 

मैं द्वारा नहीं लापता पैरामीटर मामले required = false के लिए बदल रहा हैंडल करना चाहते हैं। डिफ़ॉल्ट रूप से 400 त्रुटि लौटा दी गई है, लेकिन मैं वापस लौटना चाहता हूं चलिए एक अलग पृष्ठ कहें। मैं इसे कैसे प्राप्त करूं?

उत्तर

20

यदि आवश्यक @RequestParam अनुरोध में मौजूद नहीं है, तो वसंत MissingServletRequestParameterException अपवाद फेंक देगा। आपको लगता है कि अपवाद को संभालने के लिए एक ही नियंत्रक में या एक @ControllerAdvice में एक @ExceptionHandler परिभाषित कर सकते हैं:

@ExceptionHandler(MissingServletRequestParameterException.class) 
public void handleMissingParams(MissingServletRequestParameterException ex) { 
    String name = ex.getParameterName(); 
    System.out.println(name + " parameter is missing"); 
    // Actual exception handling 
} 

मैं का एक अलग पेज मान लीजिए वापस जाने के लिए चाहते हैं। मैं इसे कैसे प्राप्त करूं?

Spring documentation राज्यों के रूप में:

मानक नियंत्रक तरीकों एक @RequestMapping एनोटेशन के साथ एनोटेट की तरह, विधि तर्कों और @ExceptionHandler तरीकों में से मान लचीला हो सकता है। उदाहरण के लिए, HttpServletRequest को सर्वलेट वातावरण में और PortletRequest पोर्टलेट वातावरण में एक्सेस किया जा सकता है। वापसी प्रकार एक String, एक ResponseEntity जो एक दृश्य के नाम, एक ModelAndView वस्तु के रूप में व्याख्या की है हो सकता है, या आप भी विधि वापसी को संदेश कन्वर्टर्स के साथ बदला है और लिखा मूल्य के लिए @ResponseBody जोड़ सकते हैं प्रतिक्रिया धारा।

+0

@ एली यह पूरी तरह से काम किया। आपके सहयोग के लिए धन्यवाद। साथ ही, यह जानने का एक तरीका है कि किस विधि ने इस अपवाद को फेंक दिया? मैं इसे 'printStack() 'में नहीं ढूंढ सकता। – peech

+0

@peech अपवाद केवल पैरा प्रकार और param नाम जानकारी encapsulates। तो नहीं, आप नहीं जानते कि अपवाद किस विधि को फेंकता है। –

2

आप वैकल्पिक प्रकार का लाभ उठाकर स्प्रिंग 4.1 बाद और जावा 8 के साथ ऐसा कर सकते हैं। आपके उदाहरण में इसका मतलब होगा कि आपका @RequestParamString अब Optional<String> का प्रकार होगा। इस सुविधा को प्रदर्शित करने वाले उदाहरण के लिए

Take a look at this article उदाहरण के लिए।

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