Estou desenvolvendo um serviço RESTful simples para torneios e horários. Quando um torneio é criado por meio de uma solicitação POST que contém um corpo JSON, o torneio é inserido em um BiMapdeclarado da seguinte maneira em uma implementação do DAO:
private BiMap<String, Tournament> tournaments = Maps.synchronizedBiMap(HashBiMap.create());
Quando um torneio é criado, seu ID de string associado é retornado para que o usuário possa ter referência futura a esse torneio. Ele / ela pode obter informações de volta do novo torneio, realizando a seguinte solicitação:
GET http://localhost:8080/eventscheduler/c15268ce-474a-49bd-a623-b0b865386f39
Mas e se nenhum torneio com esse ID for encontrado? Até agora, estou retornando uma resposta 204. Bem, Jersey está fazendo isso por mim ao retornar nullde um de seus métodos. Este é o método que corresponde à rota acima:
@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;
}
Minha pergunta é: está correto retornar uma 204: No Contentresposta ou deve ser uma 404resposta, pois o recurso não foi encontrado?
Se devo alterá-lo para uma questão 404, óbvia: devo alterar a assinatura do método, certo? Como agora um torneio (do tipo Tournament) pode não ser retornado, o método deve parecer diferente. Em vez disso, devo usar o Responsetipo como tipo de retorno?
{content: ''}), uma resposta 204 seria inadequada.