Java EE 7 - Использование @DELETE или @PUT с телом объекта - PullRequest
2 голосов
/ 26 марта 2019

У меня есть метод обслуживания, который выглядит следующим образом

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? Я не могу изменить реализацию метода сервиса, так что это не вариант. Какая следующая лучшая альтернатива здесь?

UPDATE

В методе 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.

1 Ответ

2 голосов
/ 26 марта 2019

Ну, DELETE предназначено для ... удаления содержимого . Так что придерживайтесь этого (без тела).

Вы можете удалить ресурс, используя его уникальный идентификатор, отправленный в качестве параметра пути:

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

Если вам нужно удалить несколько ресурсов, вы можете рассмотреть параметры запроса, чтобы отфильтровать коллекцию ресурсов, а затем удалить ресурсы, которые соответствуют следующим критериям:

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