2013-07-08 8 views
23

में गतिशील रूप से @ResponseStatus को बदलना मुझे वास्तव में यकीन नहीं है कि यह वसंत 3.2 एमवीसी का उपयोग कर व्यवहार्य है या नहीं।एनोटेशन संचालित स्प्रिंग एमवीसी

@RequestMapping(method = RequestMethod.GET) 
@ResponseStatus(HttpStatus.OK) 
public @ResponseBody List<Foo> getAll(){ 
    return service.getAll(); 
} 

सवाल::

मेरे नियंत्रक एक विधि नीचे के रूप में घोषित किया है

  1. @ResponseStatus(HttpStatus.OK) का अर्थ क्या है?
  2. क्या यह दर्शाता है कि विधि हमेशा HttpStatus.OK स्थिति कोड लौटाएगी।
  3. क्या होगा यदि सेवा परत से कोई अपवाद फेंक दिया गया हो?
  4. क्या मैं किसी भी अपवाद की घटना पर प्रतिक्रिया स्थिति बदल सकता हूं?
  5. मैं एक ही विधि में स्थितियों के आधार पर एकाधिक प्रतिक्रिया स्थितियों को कैसे संभाल सकता हूं?
+0

http://www.captaindebug.com/2012/02/spring-3-mvc-exception-handlers-and_14.html#.Vapp2JSgPqR –

+0

** 1 ** ** कृपया पढ़ें [स्थिति] (http: // www.w3.org/Protocols/rfc2616/rfc2616-sec10.html) शायद आपको 'ResponseEntity' का उपयोग करना चाहिए। – user902691

उत्तर

22

@ResponseStatus(HttpStatus.OK) मतलब यह है कि अनुरोध ठीक करता है, तो हैंडलिंग विधि सामान्य रूप से रिटर्न वापस आ जाएगी (यह व्याख्या, इस मामले के लिए अनावश्यक है डिफ़ॉल्ट प्रतिसाद स्थिति है के रूप में HttpStatus.OK)। यदि हैंडलर अपवाद फेंकता है, तो एनोटेशन लागू नहीं होता है।

मैं एक ही विधि में स्थितियों के आधार पर एकाधिक प्रतिक्रिया स्थितियों को कैसे प्रबंधित कर सकता हूं?

वह प्रश्न has already been asked

मैं किसी भी अपवाद

की घटना पर प्रतिक्रिया स्थिति बदल सकते हैं आपके पास दो विकल्प। यदि अपवाद वर्ग स्वयं में से एक है, तो आप @ResponseStatus के साथ अपवाद वर्ग को एनोटेट कर सकते हैं। दूसरी पसंद एक अपवाद हैंडलर के साथ नियंत्रक वर्ग प्रदान करना है, @ExceptionHandler के साथ एनोटेटेड है, और अपवाद हैंडलर प्रतिक्रिया स्थिति सेट करता है।

+0

हां सवाल पहले से ही पूछा गया है लेकिन क्या आपको जवाब मिला ?? – dharam

+0

इससे कोई फर्क नहीं पड़ता कि मुझे जवाब मिल गया है; आपके प्रश्न का दूसरा भाग पिछले प्रश्न का डुप्लिकेट है। डुप्लिकेट प्रश्न बंद हो जाते हैं, इसलिए आपके प्रश्न का महत्वपूर्ण हिस्सा पहला हिस्सा होना चाहिए। – Raedwald

+6

यह पूछा गया है लेकिन एकमात्र उत्तर में एक कम वोट प्राप्त हुआ।आपको उस संदिग्ध धागे को इंगित करने के बजाय दूसरे प्रश्न का ठोस उत्तर प्रदान करना चाहिए था। – Bnrdo

9

आप @ResponseStatus के लिए एकाधिक स्थिति मान सेट नहीं कर सकते हैं।

// return with no body or headers  
return new ResponseEntity<String>(HttpStatus.NOT_FOUND); 

आप करना चाहते हैं: एक दृष्टिकोण मैं के बारे में सोच सकते हैं आपको लगता है कि में HttpStatus सेट कर सकते हैं, प्रतिसाद स्थिति जो HttpStatus.OK

@RequestMapping(value = "login.htm", method = RequestMethod.POST) 
@ResponseStatus(HttpStatus.OK) 
public ModelAndView login(@ModelAttribute Login login) { 
    if(loginIsValidCondition) { 
     //process login 
     //..... 
     return new ModelAndView(...); 
    } 
    else{ 
     throw new InvalidLoginException(); 
    } 
} 

@ExceptionHandler(InvalidLoginException.class) 
@ResponseStatus(HttpStatus.BAD_REQUEST) 
public ModelAndView invalidLogin() { 
    //handle invalid login 
    //..... 
    return new ModelAndView(...); 
} 
12

नहीं है आप एक ResponseEntity सीधे वापस लौटाते हैं के लिए @ExceptionHandler उपयोग करने के लिए है चुनने के लिए 404, HttpStatus has lots of other values के अलावा कोई त्रुटि लौटें।

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