Estuve 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 esp...

Luis Enrique Carreño Herreño

Luis Enrique Carreño Herreño

Pregunta
studenthace 5 años

Estuve probando el GET para categorías inexistentes y pasa ésto:

Screenshot from 2020-10-12 13-23-06.png

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.

Screenshot from 2020-10-12 13-24-14.png

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.

3 respuestas
para escribir tu comentario
    Alexandra Serna Cardona

    Alexandra Serna Cardona

    studenthace 4 años

    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

    José Alejandro Maya Montiel

    studenthace 4 años

    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

    Alejandro Ramírez

    teacherhace 5 años

    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! 🚀

Curso de Java Spring

Curso de Java Spring

Construye una API REST con Java Spring para gestionar productos en un supermercado. Aprende a mapear objetos, manejar bases de datos con Spring Data, y aplicar principios de desarrollo profesional. Expone y controla servicios usando Swagger y Heroku. Ideal para profundizar en el desarrollo de aplicaciones empresariales robustas y seguras.

Curso de Java Spring
Curso de Java Spring

Curso de Java Spring

Construye una API REST con Java Spring para gestionar productos en un supermercado. Aprende a mapear objetos, manejar bases de datos con Spring Data, y aplicar principios de desarrollo profesional. Expone y controla servicios usando Swagger y Heroku. Ideal para profundizar en el desarrollo de aplicaciones empresariales robustas y seguras.