Rozwijam prostą usługę RESTful dla turniejów i harmonogramów. Gdy turniej jest tworzony na podstawie żądania POST zawierającego ciało JSON, turniej jest wstawiany do BiMap
, zadeklarowanej w następujący sposób w implementacji DAO:
private BiMap<String, Tournament> tournaments = Maps.synchronizedBiMap(HashBiMap.create());
Po utworzeniu turnieju jest zwracany powiązany identyfikator ciągu, aby użytkownik mógł mieć w przyszłości odniesienia do tego turnieju. Może odzyskać informacje z nowego turnieju, wykonując następujące żądanie:
GET http://localhost:8080/eventscheduler/c15268ce-474a-49bd-a623-b0b865386f39
Ale co, jeśli nie zostanie znaleziony turniej o takim identyfikatorze? Do tej pory zwracam odpowiedź 204. Jersey robi to za mnie, wracając null
z jednej ze swoich metod. Jest to metoda, która odpowiada powyższej trasie:
@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;
}
Moje pytanie brzmi: czy odpowiedź jest w porządku 204: No Content
, czy raczej powinna to być 404
odpowiedź, ponieważ nie znaleziono zasobu?
Jeśli powinienem zmienić go na 404, oczywiste pytanie: powinienem zmienić podpis metody, prawda? Ponieważ teraz turniej (typu Tournament
) może nie zostać zwrócony, metoda powinna wyglądać inaczej. Czy Response
zamiast tego powinienem użyć tego typu jako typu zwrotu?
{content: ''}
), Odpowiedź 204 byłaby nieodpowiednia.