泽西客户端使用null put方法

时间:2016-08-09 20:31:52

标签: java jersey jersey-client

我正在为我的一项服务开发一个Jersey服务客户端,并且无法确定通过客户端put传递空实体的最佳方法。在服务方面,这是我的终点:

  @PUT
  @Path("/rule/disable/key/{key}")
  @Produces(MediaType.APPLICATION_JSON)
  public Response disableRuleByKey(@PathParam("key") String key)
      throws Exception {
    try {
      DAL.getWriter().disableRuleByKey(key);
      return Response.ok().build();
    } catch (BlahException bla) {
      throw de;
  }

基本上,后端的所有方法都是翻转切换,以便应用程序的其他部分使用。我不确定put是否是在这里使用的正确电话(但这是由队友写的)。我知道它甚至没有JSON有效载荷。

无论如何,在客户端,我有通用的putItem()代码,供我extends的所有客户使用:

  public static <T> boolean putItem(Client client, String uri, T item)
      throws InterruptedException,
      ExecutionException {
    Invocation putConfig = client.target(uri).request()
        .buildPut(Entity.entity(item, MediaType.APPLICATION_JSON));
    Future<Response> asyncResponse = putConfig.submit();
    Response response = asyncResponse.get();

    return response.getStatus() == Status.OK.getStatusCode();
  }

这个PUT使用JSON有效载荷很好地进入数据库,但由于上面的方法没有特别有效载荷,我想知道最佳的行动方案是什么。将Invocation的.buildPut()修改为null是可以的,因为我没有传递有效载荷。

我也愿意修改端点,但这是我目前所拥有的,并且无法找出将此值发送到后端的最佳方法。我应该只修改端点以使用JSON对象,而不是将密钥作为@PathParam传递?

1 个答案:

答案 0 :(得分:1)

当用PUT请求替换资源的状态时,您应该在请求有效负载中发送新的表示。

查看RFC 7231,HTTP / 1.1中语义和内容的当前参考:

  

4.3.4. PUT

     

PUT方法请求使用请求消息有效内容中包含的表示定义的状态创建或替换目标资源的状态。 [...]