Versiones comparadas

Clave

  • Se ha añadido esta línea.
  • Se ha eliminado esta línea.
  • El formato se ha cambiado.

Cuando implementamos nuestros servicios REST que devuelven objetos de la lógica de negocio de nuestra aplicación se pueden dar dos casos: los objetos que devolvemos son entidades, nuestros objetos no son entidades.

Si los objetos son entidades, estaremos exponiendo todos sus datos y en muchos casos no querremos enviarlo todo. Por ejemplo si guardase en una entidad los valores usuario y password, no debemos enviar dicho password como respuesta del JSON. Ante esta situación podríamos usar la anotación @JsonIgnore que fuerza que ese campo no se envíe, pero se aplicaría a todos los casos.

Si a partir de una entidad, según en el caso, quisiéramos mandar un conjunto de campos diferente, la anotación @JsonIngore no es suficiente. En general las buenas prácticas de uso de servicios REST nos indican que siempre devolvamos objetos DTO y no expongamos las entidades de negocio, por tanto debemos seguir esta directrízdirectriz.

Para evitar que la generación de la respuesta como DTO añada complejidad a nuestro código, es recomendable usar elementos de la programación funcional disponibles desde Java8. El modo de proceder debería ser similar al siguiente:

...

  • this.usuarioService.findAll(): devuelve las entidades igual que con la manera tradicional
  • parallelStream(): Crea un stream para procesar la lista de manera paralela. Si no nos importa el orden los stream paralelos aprovechan la potencia de la programación concurrente para optimizar los recorridos.
  • map(Usuario::toDTO): Esta función cambia cada elemento de la lista por el resultado de ejecutar la expresión Lambda o referencia a método que contiene.
  • Usuario::toDTO: Ejecuta Es una referencia a método que ejecuta el método toDTO() de la clase Usuario para cada valor del stream.
  • collect(Collectors.toList()): Devuelve el resultado de procesar el stream como una lista.

Nota: Cuando usamos un parallelStream crea tantas tareas paralelas como cores CPU disponibles -1