Я занимаюсь разработкой простого сервиса RESTful для турниров и расписаний. Когда турнир создается с помощью запроса POST, содержащего тело JSON, турнир вставляется в элемент BiMap
, объявленный в реализации DAO следующим образом:
private BiMap<String, Tournament> tournaments = Maps.synchronizedBiMap(HashBiMap.create());
Когда создается турнир, возвращается связанный с ним идентификатор строки, чтобы пользователь мог иметь будущую ссылку на этот турнир. Он / она может получить информацию от нового турнира, выполнив следующий запрос:
GET http://localhost:8080/eventscheduler/c15268ce-474a-49bd-a623-b0b865386f39
Но что, если турнир с таким идентификатором не найден? Пока я возвращаю 204 ответа. Ну, Джерси делает это для меня, когда возвращается null
одним из методов. Это метод, который соответствует маршруту выше:
@Path("/{id}")
@GET
@Produces(MediaType.APPLICATION_JSON)
public Tournament getTournament(@PathParam("id") String id) {
Optional<Tournament> optTournament = tournamentDao.getTournament(id);
if (optTournament.isPresent())
return optTournament.get();
return null;
}
Мой вопрос: нормально ли возвращать 204: No Content
ответ, или это должен быть 404
ответ, поскольку ресурс не был найден?
Если я должен изменить его на 404, очевидный вопрос: я должен изменить подпись метода, верно? Так как теперь турнир (типа Tournament
) не может быть возвращен, метод должен выглядеть иначе. Должен ли я использовать Response
тип в качестве типа возврата вместо?
{content: ''}
), ответ 204 был бы неуместным.