Spring 3.2 DeferredResult – 如何设置错误响应的状态代码?

Spring Web 3.2附带了一个用于异步请求处理的DeferredResult类。 它有一个setErrorResult用于在出现问题时提供备用响应,但没有提供http错误代码的选项。

当然必须能够控制失败请求的http响应代码。我如何使用新的Spring api做到这一点?

setErrorResult方法的doc说明如下:

为DeferredResult设置错误值并处理它。 该值可以是Exception或Throwable,在这种情况下,它将被处理,就像处理程序引发exception一样。

我想通过设置Exception ,您可以触发一个返回所需代码的exception处理程序。

 deferredResult.setErrorResult(new Exception()); 

这将始终将HTTP响应代码设置为500.为了更好的控制,HttpServletResponse.setStatus似乎可以工作。

这将适用于user411180的客户端 。

 public DeferredResult> getMessages(@RequestParam int reqestedIndex, final HttpServletResponse response) { final DeferredResult> 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; }