【问题标题】:Reporting progress from RESTful service based on Jersey基于 Jersey 的 RESTful 服务报告进度
【发布时间】:2015-02-21 00:33:30
【问题描述】:

我有一个使用 Jersey(Java) 开发的 RESTful 服务,它为用户提供了繁重的工作,包括单个完整操作的多个文件传输部分。我想使用此服务向客户端(用户)提供某种进度通知,指示正在进行的操作或已完成的操作百分比。通知的准确性不是问题。鉴于这是一个 RESTful 服务,有什么想法可以实现吗?任何现有的样本都可能会有所帮助。

更新/澄清: 此通知类似于主要操作仍在进行时的进度/状态通知,因为在某些情况下,整个操作可能需要 5 分钟以上我想确保我更新客户端关于服务端发生的事情和为什么要花这么长时间才能完成请求。

例如。请求……状态……状态……状态……最终响应。

我假设这不会发生在同一个请求/响应管道上,这可能涉及在客户端和服务之间创建另一个通信管道。

【问题讨论】:

    标签: java rest notifications jersey


    【解决方案1】:

    当我询问similar question 时,有人建议我回复HTTP 202 Accepted 并提供新创建资源的地址 - 操作状态:

    HTTP 202 Accepted
    Location: /jobs/statuses/<status_id>
    

    【讨论】:

      【解决方案2】:

      您可以返回一个包含所有信息的 json 字符串。生成监控信息的方式取决于您。

      这是一个带有 json 的控制器示例:

      @RequestMapping(value = "/getblabla", method = RequestMethod.POST)
      public @ResponseBody String getblabla(@RequestParam("json") String json,
          HttpServletRequest request) {
      
          // Do something
      
          return resJson;
      }
      

      然后你可以使用像 Gson 这样有两个主要方法的库。

      以下是如何将 json 映射到对象:

       MyDto obj = gson.fromJson(json, MyDto.class);
      

      以下是将对象映射到 Json 的方法:

      String json = gson.toJson(obj);
      

      【讨论】:

      • 此状态通知假设在操作正在进行时发生,而不是在操作完成并返回响应时发生。例如。请求……状态……状态……状态……响应。
      猜你喜欢
      • 1970-01-01
      • 2016-08-29
      • 1970-01-01
      • 2011-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-13
      • 2017-05-24
      相关资源
      最近更新 更多