Java EE 7 - 对实体主体使用@DELETE 或@PUT

Java EE 7 - Using @DELETE or @PUT with an entity body

我有一个看起来像这样的服务方法

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

数据 class 中有几个字段。像这样

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...
}

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

嗯,DELETE 用于...删除内容。所以坚持下去(没有 body)。

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

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

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

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