[英]Spring 3.2 DeferredResult - How to set status code for error response?
Spring Web 3.2附帶了一個用於異步請求處理的DeferredResult
類。 它有一個setErrorResult
用於在出現問題時提供備用響應,但沒有提供http錯誤代碼的選項。
當然必須能夠控制失敗請求的http響應代碼。如何使用新的Spring api做到這一點?
setErrorResult
方法的doc說明如下:
為DeferredResult設置錯誤值並處理它。 該值可以是Exception或Throwable,在這種情況下,它將被處理,就像處理程序引發異常一樣。
我想通過設置Exception
,您可以觸發一個返回所需代碼的異常處理程序。
deferredResult.setErrorResult(new Exception());
這將始終將HTTP響應代碼設置為500.為了更好的控制,HttpServletResponse.setStatus似乎可以工作。
這將適用於user411180的客戶端 。
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;
}
您作為參數傳遞給setErrorResult
的異常可以使用@ResponseStatus
進行注釋。 例如,創建自己的異常類:
@ResponseStatus(HttpStatus.NOT_FOUND)
class NotFoundException extends RuntimeException {
// add your own constructors to set the error message
// and/or cause. See RuntimeException for valid ctors
}
然后在您的代碼中使用它與您創建的構造函數,例如:
deferredResult.setErrorResult(new NotFoundException(reason, cause));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.