Java EE 7 - 将 @DELETE 或 @PUT 与实体主体一起使用

标签 java rest jakarta-ee jersey jax-rs

我有一个如下所示的服务方法

public void deleteData(Data data) {
    this.dataDao.deleteData(data);
}

数据类中有几个字段。像这样的东西

private String name;
private String category;
private String discriminator;
private String description;
private String appName;

// getters & setters

我需要为此编写一个休息方法。我本来想写这样的东西

@DELETE
@Path("/deleteData")
public Response deleteData(Data data) {
    // implementation
}

问题在于,不建议也不广泛使用将 @DELETE 与实体主体一起使用。

我的问题是使用 @PUT 代替 @DELETE 是否可以?我无法更改服务方法实现,因此这不是一个选项。这里的下一个最佳选择是什么?

更新

dataDao.deleteData()方法中,查找对象并不是通过对象的ID来完成的。它看起来像这样:

DataEntity entity = this.findDataByNameAndAppName(data.getName(), data.getAppName());

我决定做这样的事情:

@DELETE
@Path("/deleteDataset")
public Response deleteDataset(@QueryParam("name") String name,
                              @QueryParam("appName") String appName) {
// implementation...
}

不过,我没有找到任何带有 @QueryParam@DELETE 方法的示例。所有示例均使用 @PathParam 代替。

最佳答案

嗯,DELETE用于...删除内容。所以坚持这一点(没有正文)。

您可以使用作为路径参数发送的唯一标识符来删除资源:

DELETE /resources/{id} HTTP/1.1
Host: example.org

如果需要删除多个资源,可以考虑使用查询参数来过滤资源集合,然后删除符合条件的资源:

DELETE /resources?name=foo&category=bar HTTP/1.1
Host: example.org

关于Java EE 7 - 将 @DELETE 或 @PUT 与实体主体一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55360922/

相关文章:

java - 如果我想在返回 false 或抛出异常时执行相同的代码怎么办?

java - Jaxb 未编码列表为空

java - 再次运行程序

api - 除了 SSL,我还需要什么?为什么

java - 使用jxl解析Excel

java - 在 JSF 中生成自己的 session ID

java - 如何从 Rest 调用返回 List<String>

java - Liferay:如何在 MailServiceUtil 中指定附件的 CID(以便它们可以嵌入(即图像)在 HTML 内容电子邮件中)

WCF REST 与 ADO.NET 数据服务

rest - REST 服务中的 EJB 返回空指针异常