【问题标题】:How to define and test a DELETE operation endpoint using @QueryParam with Jersey?如何使用带有 Jersey 的 @QueryParam 定义和测试 DELETE 操作端点?
【发布时间】:2018-03-16 10:40:32
【问题描述】:

我可以在定义 DELETE 操作时使用@QueryParam 吗?如果是,当我需要使用 jersey 客户端对其进行测试时,java 代码会是什么样子?我尝试了类似

String result = client.target(url)
                      .queryParam("id",3)
                      .request(MediaType.APPLICATION_XML)
                      .delete(String.class);

但它不起作用。

【问题讨论】:

  • 在路径中包含 id 会更好,即。 DELETE /url/:id 并使用 @PathParam。如果你能改变它,我建议你这样做。
  • @Bentaye 好的。那么我们什么时候需要使用QueryParam呢?
  • 这是一个关于 RESTapi 设计的全新问题,我建议您简单地 google 一下,您会找到很多答案。例如stackoverflow.com/questions/11552248/…

标签: java rest jersey jersey-test-framework


【解决方案1】:

您可以使用@PathParam(推荐)或@QueryParam定义DELETE端点

使用@PathParam(推荐)

端点:url/:id

@DELETE
@Path("{id}")
@Produces(MediaType.APPLICATION_JSON)
public void deletePathParam(@PathParam("id") int id) {
  ...
}

测试:

@Test
public void testDeletePathParam() {
  Response output = target(url+"/3").request().delete();
   // asserts
}

使用 @QueryParam(糟糕的 RESTapi 设计)

端点:url?id=:id

@DELETE
@Produces(MediaType.APPLICATION_JSON)
public void deleteQueryParam(@QueryParam("id") int id) {
  ...
}

测试:

@Test
public void testDeleteQueryParam() {
  Response output = target(url).queryParam("id", 3).request().delete();
   // asserts
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-18
    • 1970-01-01
    • 2013-07-23
    • 1970-01-01
    • 1970-01-01
    • 2015-06-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多