需要在基于Spring Boot的REST应用程序中添加以下功能:
调用POST方法时,将启动长时间运行的进程。每隔一段时间(大约每5秒钟),我需要在浏览器中向用户显示一条消息,直到过程结束。
注意:此方法可能不只是从浏览器调用。可能在将来从shell脚本调用。目标是在“响应机构”中间歇性地发送响应。
我尝试添加如下代码:
OutputStream os = response.getOutputStream();
os.write(msg.getBytes());
os.flush();
但是在冲洗时得到了NullPointer异常。
我该怎么做?我是否必须进行AJAX调用或类似的事情?
答案 0 :(得分:3)
这里有几个问题。最基本的是,HTTP并不是为了向单个请求发送多个响应而设计的。其次,在长时间运行的过程中阻塞请求处理线程可能会导致问题。
更好的方法是在启动长时间运行流程后立即发送响应。此响应将具有202 Accepted
状态代码和Location
标头,该标头提供另一个URI,客户端可以轮询该URI以获取有关长时间运行任务的信息。例如:Location: https://yourapi.example.com/tasks/123456
。然后,客户有责任对此任务URI执行GET
请求,以获取有关长时间运行过程进度的信息。