2013-02-01 33 views
6

स्प्रिंग वेब 3.2 एसिंक्रोनस अनुरोध प्रसंस्करण के लिए DeferredResult कक्षा के साथ आता है। कुछ गलत होने पर वैकल्पिक प्रतिक्रिया प्रदान करने के लिए setErrorResult है, लेकिन http त्रुटि कोड प्रदान करने का कोई विकल्प नहीं है।वसंत 3.2 DeferredResult - त्रुटि प्रतिक्रिया के लिए स्थिति कोड कैसे सेट करें?

असफल अनुरोधों के लिए http प्रतिक्रिया कोड को नियंत्रित करना संभव है .. मैं नए वसंत एपीआई का उपयोग करके ऐसा कैसे कर सकता हूं?

उत्तर

7

docsetErrorResult विधि के लिए कहते हैं निम्नलिखित: DeferredResult के लिए

कोई त्रुटि मान निर्धारित करें और इसे संभाल। मान एक अपवाद या थ्रोबल हो सकता है, जिस स्थिति में इसे संसाधित किया जाएगा जैसे एक हैंडलर ने अपवाद उठाया।

मुझे लगता है कि Exception सेट करके, आप एक अपवाद हैंडलर ट्रिगर कर सकते हैं जो आपके इच्छित कोड को लौटाता है।

1
deferredResult.setErrorResult(new Exception()); 

यह हमेशा HttpServletResponse.setStatus काम करने के लिए लगता है बेहतर नियंत्रण के लिए 500 के लिए HTTP प्रतिक्रिया कोड सेट हो जाएगा।

यह user411180's client side के साथ काम करेगा।

public DeferredResult<List<Point>> getMessages(@RequestParam int reqestedIndex, 
      final HttpServletResponse response) { 

    final DeferredResult<List<Point>> deferredResult = new DeferredResult<>(); 
    deferredResult.onCompletion(...); 
    deferredResult.onTimeout(new Runnable() { 
     @Override 
     public void run() { 
      deferredResult.setErrorResult("Explanation goes here."); 
      response.setStatus(HttpServletResponse.SC_PARTIAL_CONTENT); //or SC_NO_CONTENT 
     } 
    }); 

    longPollRequests.put(deferredResult, reqestedIndex); 
    return deferredResult; 
} 

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

  • कोई संबंधित समस्या नहीं^_^