
Luis Enrique Carreño Herreño
PreguntaEstuve probando el GET para categorías inexistentes y pasa ésto:
Genera una respuesta OK y muestra una lista vacía, lo cual no es lo esperado. Modifico el código para preguntar si la lista tiene elementos:
@GetMapping("/category/{categoryId}") public ResponseEntity<List<Product>> getByCategory(@PathVariable("categoryId") int categoryId) { return productService.getByCategory(categoryId) .map(products -> { if (products.size() > 0) return new ResponseEntity<>(products, HttpStatus.OK); else return new ResponseEntity<List<Product>>(HttpStatus.NOT_FOUND); }) .orElse(new ResponseEntity<>(HttpStatus.NOT_FOUND)); }
Y obtengo en Postman lo esperado: Status Not Found y el cuerpo de la respuesta sin contenido.
Pregunta: ¿Estos ajustes se pueden hacer aquí, o lo ideal es que desde el dominio se controle, o desde la persistencia?
Observación: Estoy casi seguro que el método .orElse no se ejecuta nunca, ya que cuando no hay productos que cumplan con la categoría va a devolver una lista vacía.
Saludos, esta bueno el curso.

Alexandra Serna Cardona
Viendo lo que respondió Alejandro Ramirez... ¿No sería mejor si se hace la validación de una categoría no existente en el repository o en la persistencia de la categoria y que esta validación retorne una respuesta que lleve a un not_found o un no_content en el controller del producto?

José Alejandro Maya Montiel
Resuelto, mi pregunta era la misma. Deberían colocarla entre las principales porque hay otros compañeros que les paso lo mismo.

Alejandro Ramírez
Muchas gracias por tu aporte, Luis! Tienes toda la razón y tu apunte es más que acertado.
Lo ideal es que el ajuste se haga desde el controller porque es quien necesita controlar el tipo de respuesta según lo que resulte. En mi caso lo puse de la siguiente manera haciendo uso del filter (donde filtro solo si la lista no es vacía) antes del map:
@GetMapping("/category/{categoryId}") public ResponseEntity<List<Product>> getByCategory(@PathVariable("categoryId") int categoryId) { return productService.getByCategory(categoryId).filter(Predicate.not(List::isEmpty)) .map(products -> new ResponseEntity<>(products, HttpStatus.OK)) .orElse(new ResponseEntity<>(HttpStatus.NOT_FOUND)); }
Muchas gracias por corregir este problema! 🚀