Dil*_*eam 3 java spring servlets jackson spring-boot
需要向我的基于 Spring Boot 的 REST 应用程序添加以下功能:
当调用 POST 方法时,将启动一个长时间运行的进程。我需要定期(每 5 秒左右)在浏览器中向用户显示一条消息,直到该过程结束。
注意:此方法可能不仅仅从浏览器调用。将来可能会从 shell 脚本中调用。目标是在“响应主体”中间歇地发送响应。
我尝试添加如下代码:
OutputStream os = response.getOutputStream();
os.write(msg.getBytes());
os.flush();
Run Code Online (Sandbox Code Playgroud)
但在刷新时出现 NullPointer 异常。
我该怎么做?我是否必须进行 AJAX 调用或类似的操作?
这里有几个问题。最基本的是,HTTP 并不是为单个请求发送多个响应而设计的。其次,在长时间运行的进程期间阻塞请求处理线程可能会导致问题。
更好的方法是在长时间运行的进程启动后立即发送响应。此响应将包含一个202 Accepted状态代码和一个Location标头,该标头提供另一个 URI,客户端可以轮询该 URI 以获取有关长时间运行的任务的信息。例如:Location: https://yourapi.example.com/tasks/123456。然后,客户端负责GET针对此任务 URI 执行请求,以获取有关长时间运行的进程的进度信息。