2013-02-01 53 views
6

Web mùa xuân 3.2 đi kèm với lớp học DeferredResult để xử lý yêu cầu không đồng bộ. Nó có một số setErrorResult để cung cấp phản hồi thay thế nếu có sự cố, nhưng không có tùy chọn để cung cấp mã lỗi http.Mùa xuân 3.2 DeferredResult - Cách đặt mã trạng thái cho phản hồi lỗi?

Chắc chắn phải có khả năng kiểm soát mã phản hồi http cho các yêu cầu không thành công .. Làm cách nào để thực hiện điều đó bằng cách sử dụng api Mùa xuân mới?

Trả lời

7

Các doc cho setErrorResult phương pháp nói như sau:

Đặt giá trị lỗi cho DeferredResult và xử lý nó. Giá trị có thể là là Ngoại lệ hoặc Có thể ném được, trong trường hợp đó, nó sẽ được xử lý như thể một người xử lý đã nêu ra ngoại lệ.

Tôi giả sử bằng cách đặt Exception, bạn có thể kích hoạt trình xử lý ngoại lệ trả về mã bạn muốn.

1
deferredResult.setErrorResult(new Exception()); 

Điều này sẽ luôn đặt mã phản hồi HTTP thành 500. Để kiểm soát tốt hơn HttpServletResponse.setStatus có vẻ hoạt động.

Điều này sẽ hoạt động với 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; 
} 
Các vấn đề liên quan