Java Spring 3.2延迟结果-如何设置错误响应的状态代码?
SpringWeb3.2附带了一个用于异步请求处理的Java Spring 3.2延迟结果-如何设置错误响应的状态代码?,java,spring,spring-mvc,asynchronous,Java,Spring,Spring Mvc,Asynchronous,SpringWeb3.2附带了一个用于异步请求处理的DeferredResult类。它有一个setErrorResult,用于在出现问题时提供替代响应,但没有提供http错误代码的选项 当然,必须能够控制失败请求的http响应代码。。如何使用新的SpringAPI实现这一点 forsetErrorResult方法说明如下: 为DeferredResult设置错误值并进行处理。价值可能 是异常或可丢弃的,在这种情况下,它将被视为 处理程序引发了异常 我想,通过设置一个异常,可以触发一个异常处理程序
DeferredResult
类。它有一个setErrorResult
,用于在出现问题时提供替代响应,但没有提供http错误代码的选项
当然,必须能够控制失败请求的http响应代码。。如何使用新的SpringAPI实现这一点 forsetErrorResult
方法说明如下:
为DeferredResult设置错误值并进行处理。价值可能
是异常或可丢弃的,在这种情况下,它将被视为
处理程序引发了异常
我想,通过设置一个异常
,可以触发一个异常处理程序,返回所需的代码
deferredResult.setErrorResult(new Exception());
这将始终将HTTP响应代码设置为500。为了更好地控制,HttpServletResponse.setStatus似乎可以工作
这将有助于解决问题
public-DeferredResult-getMessages(@RequestParam int-requestedindex,
最终HttpServletResponse(响应){
最终递延结果递延结果=新递延结果();
延迟结果。完成(…);
deferredResult.onTimeout(新的Runnable(){
@凌驾
公开募捐{
setErrorResult(“此处有解释”);
response.setStatus(HttpServletResponse.SC_PARTIAL_CONTENT);//或SC_NO_CONTENT
}
});
longPollRequests.put(延迟结果、请求索引);
返回延迟结果;
}
作为参数传递给setErrorResult
的异常可以是
用@ResponseStatus
注释。e、 g.创建自己的异常类:
@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));
deferredResult.setErrorResult(new NotFoundException(reason, cause));