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; }