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 BiMap
declarado 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 null
de 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 Content
resposta ou deve ser uma 404
resposta, 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 Response
tipo como tipo de retorno?
{content: ''}
), uma resposta 204 seria inadequada.