Spring Rest Controller先发送201再做服务操作

标签 spring rest spring-mvc controller spring-boot

  1. 客户端发送一个 post 请求来收集 id 以询问操作状态
  2. Spring Rest Controller类处理post请求并发送201 用 id 创建
  3. 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/

相关文章:

java - 休息获取: How to add "URL with Query Parameters" in Query Parameters of a URL?

rest - 我应该对 REST 资源使用单数还是复数名称约定?

json - 使用 spring/jackson 将 Kotlin 数据类转换为 JSON

java - org.hibernate.ObjectNotFoundException :No row with the given identifier exists

php - Yii2 rest api 不返回响应代码和状态

java - 运行spring boot application error : Cannot instantiate interface org. springframework.context.ApplicationListener

java - Spring 安全: can't clear authentication object

java - 使用整数字段进行 Hibernate 验证

java - Spring MVC : parse repeated request param

java - 改进 GoogleAppEngine Spring Web 应用程序启动时间