Sto sviluppando un semplice servizio RESTful per i tornei e gli orari. Quando un torneo viene creato tramite una richiesta POST contenente un corpo JSON, il torneo viene inserito in un BiMap
, dichiarato come segue in un'implementazione DAO:
private BiMap<String, Tournament> tournaments = Maps.synchronizedBiMap(HashBiMap.create());
Quando viene creato un torneo, viene restituito l'ID stringa associato in modo che l'utente possa avere riferimento futuro di quel torneo. Lui / lei può ottenere informazioni dal nuovo torneo che effettua la seguente richiesta:
GET http://localhost:8080/eventscheduler/c15268ce-474a-49bd-a623-b0b865386f39
Ma cosa succede se non viene trovato nessun torneo con tale ID? Finora, sto restituendo una risposta 204. Bene, Jersey lo sta facendo per me quando restituisce null
da uno dei suoi metodi. Questo è il metodo che corrisponde alla rotta sopra:
@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;
}
La mia domanda è: è OK restituire una risposta 204: No Content
, oppure dovrebbe essere una risposta 404
, poiché la risorsa non è stata trovata?
Se dovessi cambiarlo in una 404, ovvia domanda: dovrei cambiare la firma del metodo giusto? Poiché ora un torneo (di tipo Tournament
) potrebbe non essere restituito, il metodo dovrebbe apparire diverso. Dovrei usare invece il tipo Response
come tipo di ritorno?