- 客户端发送一个 post 请求来收集 id 以询问操作状态
- Spring Rest Controller类处理post请求并发送201 用 id 创建
Spring Rest Controller 类调用服务类开始操作 用那个ID 问题:我无法在开始操作之前返回 id。因此客户端在返回 id 之前通过 websocket 接收到一些信息
@RequestMapping(value = "/operations", method = RequestMethod.POST) public ResponseEntity<?> createNewSubscription{ String id =1; return new ResponseEntity<>(id, HttpStatus.CREATED); service.doOperations(id) }
我可以通过创建一个线程来解决这个问题,该线程调用我的服务类并在线程中等待 100 毫秒,当线程运行时将创建的 201 发送到客户端。但这不是一个好的解决方案。也许我可以使用 Spring Async rest request 但它也在等待回调方法..如何解决这个问题?
最佳答案
您可以将响应对象注入(inject)到 Controller 方法中,设置状态并刷新它。
public void createNewSubscription(HttpServletResponse resp) throws IOException {
resp.setStatus(HttpServletResponse.SC_CREATED);
resp.flush();
// ...
}
Flush 已经将响应代码和 header 发送到客户端。您可以在 Controller 线程中或异步地进行计算,例如。使用 Spring 异步。
NB - 使用 Spring Async,你用 @Async
注释的方法可以返回 void
,这意味着它是“即发即忘” - 你不必等待它完成。
关于Spring Rest Controller先发送201再做服务操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32497375/