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

时间:2019-03-26 15:32:09

标签: java rest java-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

我需要为此编写一个rest方法。我当时想写这样的东西

@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的{​​{1}}方法的任何示例。所有示例都改用@QueryParam

1 个答案:

答案 0 :(得分:2)

好吧,DELETE用于... 删除内容。所以坚持下去(没有身体)。

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

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

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

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