首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >批量/批量友好的操作JAXRS

批量/批量友好的操作JAXRS
EN

Stack Overflow用户
提问于 2015-07-06 19:26:44
回答 1查看 463关注 0票数 0

我想构建一个JAXRS方法,允许指定要在我的资源上执行的操作块。

例如,我有一个资源,Book。在这个资源上,我部署了以下方法:创建、删除和更新。如果我将这些方法设置在图书资源上,当我的客户端需要对大量图书资源执行大量更新时,他将不得不为每个图书资源发送大量请求。

我想部署一个提供此功能的JAXRS操作。例如:接收必须执行的操作的批处理方法。

然而,我不知道该怎么做。我使用的是JAXRS-2.0。

谢谢大家。

EN

回答 1

Stack Overflow用户

发布于 2015-09-25 22:13:59

无论如何,这不是一个特定于jaxrs的问题,而更多的是一个设计问题。JAXRS对此的实现相对简单。

根据您所描述的内容,我将为作业创建一个具有特定数据结构的批处理POST端点。您接受一个JSON blob (此数据结构的序列化形式),指示端点执行什么操作。一旦端点接收到数据,就会在后台产生一个线程"do work“,并返回"the job”的标识符(假设这可能是一个长时间运行的任务)。如果您确实返回了"job id",那么您还应该有一个指向"get status“的端点,该端点将在作业完成后返回当前状态以及可能的某种输出。

您可能希望接受为JSON的示例数据结构:

代码语言:javascript
复制
{
    job_name: "Some job name",
    requests: [
        {
            tasks: ["UPDATE"],
            book_id: 122,
            data: {
                pages: 155, 
                last_published_date: "2015-09-01"
            }
        },
        {
            tasks: ["DELETE"],
            book_id: 957
        }
    ]
}

您在JAXRS中的实际端点可能如下所示:

代码语言:javascript
复制
  @POST
  @Path(value = "batch")
  @Produces(MediaType.APPLICATION_JSON)
  public String batchRequest(String batchRequest) {
      BatchRequest requestObj = null;

      if (!StringUtils.isBlank(batchRequest))
      {
          Gson gson = new Gson();
          requestObj = gson.fromJson(batchRequest, BatchRequest.class);

          // This is the class that would possibly spawn off a thread
          // and return some sort of details about the job
          JobDetails jobDetails = JobRunner.run(requestObj);

          return gson.toJson(jobDetails);
      }

      return "error";
}

希望这是有意义的,并有助于解决问题。请随时回复其他问题,我将尽我所能提供帮助!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31244656

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档