2013-06-21 15 views
7

मैन्युअल रूप से छेड़छाड़ किए बिना HTTP स्थिति सेट करना एक स्प्रिंग एमवीसी अनुरोध हैंडलर में मैं आसानी से HTTP स्थिति कोड कैसे सेट कर सकता हूं?सशर्त रूप से HttpServletResponse

मेरे पास एक अनुरोध हैंडलर है जो एक नए संसाधन के निर्माण के लिए POST अनुरोधों का उत्तर देता है। अगर अनुरोध मान्य है, तो मैं इसे नए संसाधन के यूआरआई पर रीडायरेक्ट करना चाहता हूं, 201 (निर्मित) HTTP स्टेटस कोड लौटा रहा हूं। यदि अनुरोध अमान्य है मैं इसे उपयोगकर्ता प्रस्तुत रूप में त्रुटि को दूर करने के लिए एक मौका देना चाहते हैं, और 201.

@RequestMapping(value = { "/myURI/" }, method = RequestMethod.POST) 
public String processNewThingForm(
    @ModelAttribute(value = "name") final String name, 
    final BindingResult bindingResult) { 

    myValidator.validate(name, bindingResult); 

    if (!bindingResult.hasErrors()) { 
    getService().createThing(name); 
    return "redirect:" + name; 
    } else { 
    return "newThingView"; 
    } 

}

का स्थिति कोड नहीं देना चाहिए लेकिन वह नहीं देता है पुनर्निर्देशन मामले के लिए सही प्रतिक्रिया स्थिति।

मैं केवल @ResponseStatus जोड़ नहीं सकता, क्योंकि दो संभावित स्थितियां हैं। मुझे उम्मीद है कि manually manipulating the HttpServletResponse से एक साफ रास्ता है। और मैं देखने के लिए दृश्य नाम इंगित करना चाहता हूं, इसलिए मैं have the request handler return a ResponseEntity object with the status set appropriately नहीं कर सकता।

उत्तर

3

यदि आप 201 प्रतिक्रिया कोड चाहते हैं, तो आप ResponseEntityHttpStatus.CREATED के साथ संसाधन बनाते हैं और दृश्य नाम अन्यथा वापस कर सकते हैं। यदि ऐसा है, तो आप एक रीडायरेक्ट (http कोड 301) का उपयोग नहीं कर सकते हैं। RedirectView देखें।

+0

"यदि हां, तो आप एक रीडायरेक्ट का उपयोग नहीं कर सकते" मुझे पता है। यह मेरे प्रश्न का मुद्दा है – Raedwald

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