我想编写一个Java rest服务来接受请求,立即以200或202响应并在后台处理请求。用户不必等待整个过程完成。请建议
我的休息控制器类
@Override
public Response generateReport(Request requst) {
return service.generateReport(requst);
}
服务类别:
@Override
@Async
public Response generateReport(Request requst) {
generateReport(requst);
return Response.ok().build();
}
public void generateReport(Request requst) {
<!-- login to process the request. it will take 15 mins to complete -->
}
答案 0 :(得分:0)
似乎您要处理异步请求,这就是我要做的。
在收到原始请求后,您可以创建一个新资源,并返回状态代码202(已接受)以及新资源的表示形式。
此资源的目的是让客户端跟踪异步任务的状态。设计该资源时,其表示应包括请求的当前状态以及相关信息,例如时间估计。
当客户端向任务资源提交GET请求时,请根据请求的当前状态执行以下操作之一:
仍然处理-返回响应代码200(OK)和带有 当前状态。 成功完成后-返回响应代码303(请参阅其他)和一个包含URI的Location标头 显示任务结果的资源。
在任务失败时-返回响应代码200(OK),其中包含任务资源的表示形式 资源创建失败。客户将需要阅读表示的正文以找到失败的原因。