在Spring启动中异步发送响应

时间:2014-10-27 02:29:04

标签: java spring servlets jackson spring-boot

需要在基于Spring Boot的REST应用程序中添加以下功能:

调用POST方法时,将启动长时间运行的进程。每隔一段时间(大约每5秒钟),我需要在浏览器中向用户显示一条消息,直到过程结束。

注意:此方法可能不只是从浏览器调用。可能在将来从shell脚本调用。目标是在“响应机构”中间歇性地发送响应。

我尝试添加如下代码:

                    OutputStream os = response.getOutputStream();
                    os.write(msg.getBytes());
                    os.flush();

但是在冲洗时得到了NullPointer异常。

我该怎么做?我是否必须进行AJAX调用或类似的事情?

1 个答案:

答案 0 :(得分:3)

这里有几个问题。最基本的是,HTTP并不是为了向单个请求发送多个响应而设计的。其次,在长时间运行的过程中阻塞请求处理线程可能会导致问题。

更好的方法是在启动长时间运行流程后立即发送响应。此响应将具有202 Accepted状态代码和Location标头,该标头提供另一个URI,客户端可以轮询该URI以获取有关长时间运行任务的信息。例如:Location: https://yourapi.example.com/tasks/123456。然后,客户有责任对此任务URI执行GET请求,以获取有关长时间运行过程进度的信息。