Pessoal,
Seria boa prática colocar o retorno no Controller ou no Service? Eu coloquei no Controller mas pensei que como é uma espécie de regra de negócio, talvez fosse melhor colocar no Service.
@GetMapping("/filmes")
public ResponseEntity<List<Filme>> filmes() {
log.info("filmes");
List<Filme> listFilmes = filmesService.findAll();
if(listFilmes.size()>0){
return new ResponseEntity<List<Filme>>(listFilmes,HttpStatus.OK);
}else{
return new ResponseEntity<List<Filme>>(HttpStatus.NOT_FOUND);
}
}
Seguindo as práticas REST, você estaria devolvendo um 404 NOT FOUND caso não tenha filmes para apresentar, porém é um retorno incorreto, afinal o recurso em si existe, mesmo que não tenha dados para apresentar, o retorno deveria ser um 200 OK confirmando a existência do recurso, caso não tenha dados o retorno seria uma lista vazia.
Ok, mas esse IF para determinar o retorno eu devo colocar no Controller ou no Service?
Em lugar nenhum, esse if não deveria nem existir aí!
Exemplo:
@GetMapping("/filmes")
public ResponseEntity<List<Filme>> filmes() {
log.info("filmes");
return new ResponseEntity<List<Filme>>(filmesService.findAll(), HttpStatus.OK);
}
1 curtida
Meus 2 centavos (referente ao uso dos códigos HTTP, pois sua dúvida original já foi solucionada): Retorne 204 (No Content) quando um recurso não for encontrado ou, nesse seu caso, quando a lista vier vazia.
Usar 404 (Not found) pode confundir pois é usada quando a URL do serviço não existe (ou foi digitada errada, whatever).
1 curtida
Seguindo essa lógica dos códigos HTTP que o @Lucas_Camara comentou tu pode fazer da seguinte forma:
Exemplo:
@GetMapping("/filmes")
public ResponseEntity<List<Filme>> filmes() {
log.info("filmes");
List<Filme> filmes = filmesService.findAll();
HttpStatus status = filmes.size() > 0 ? HttpStatus.OK : HttpStatus.NO_CONTENT;
return new ResponseEntity<List<Filme>>(filmes, status);
}
1 curtida