【问题标题】:Http DELETE with parameters using Jersey使用 Jersey 的带有参数的 Http DELETE
【发布时间】:2025-11-23 08:20:03
【问题描述】:

我的代码包含几个不同的 DELETE 方法,其中一个接受一个参数,或者至少理想情况下它会接受一个参数。但是,当我通过 CURL 或 Web 客户端发出此请求时,它不起作用。其他 DELETE 请求功能正常,我已经在要传递的参数中进行了硬编码,只是为了查看调用是否有效。我用 PathParam 和 QueryParam 都试过了,但都不管用。这是我使用 PathParams 的方法,我很确定这是正确的,QueryParams 看起来非常相似,所以我也不想发布它。

@DELETE
@Path("/byId/{id}")
public void deleteById(@PathParam("id") String id)

然后对于 QueryParams 来说基本上是一样的,但显然路径不同

据我了解,许多 RESTful API 会忽略任何带有 DELETE 请求的请求主体,或者将其视为 PUT 或 POST。有没有办法解决?基本上我有一个包含多个对象的数据库,我需要根据唯一标识符删除一个,以由客户端传入。如果没有办法解决这个问题,我还有其他方法可以做到吗?

我可能在这里遗漏了一些明显的东西,因为我现在才使用 Jersey 几个星期,到目前为止甚至从未听说过 RESTful 服务的概念。

【问题讨论】:

  • 请将您的代码添加到您的问题中。
  • @Tichodroma 我可以添加的代码并不多,除了我可能如何使用 PathParams 和 QuereyParams(将代码移到问题中)
  • 这应该可以。当您说“它不起作用”时,您到底是什么意思?
  • @Thichodroma 它从数据库中删除,它应该根据参数中给出的 id 或 id 删除,我使用路径参数或将它们添加为查询字符串和对象进行调用id 不会从数据库中删除。请求被忽略或参数被忽略我不确定是哪个。就像我说的那样,我尝试将 id 硬编码到方法中,以查看 id 是否正确或代码是否正常运行并且工作正常
  • 在访问数据库之前尝试检查id 的值。是idnull

标签: rest http parameters jersey http-delete


【解决方案1】:

您可以将信息作为标头、路径参数、查询参数或消息正文发送到 RESTful 服务。

如果所有值都按预期通过,则 jax-rs/jersey 没有问题。现在您需要调试代码并修复您的实现。 jax-rs 只会将 DELETE 调用与您已实现的 DELETE http 方法匹配。

然后,您有责任在方法中实际执行资源的 DELETE 操作。如果您不删除或在方法中执行其他操作,jax-rs 或 jersey 不会抱怨。

【讨论】: