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.
...
- Creamos dentro del paquete model ( por ejemplo: es.um.atica.miaplicacion.model) los objetos DTO que vamos a enviar. Si el proyecto es grande y lo tenemos dividido en módulos tendremos diferentes paquetes model por lo que deberemos crear cada DTO en el que corresponda.
- Dentro de nuestras entidades creamos un método toDTO() o varios toXXDTO() (siendo XX un indentificador que aporte valor semántico) que devolverá un objeto del tipo DTO con los datos que requiera de la entidad.
- Modificamos nuestro método REST para que, a partir de una lista de entidades, devuelva una lista de DTO, para esto usaremos programación funcional
Método tradicional:
| Bloque de código |
|---|
@GetMapping("api/{version}/usuarios")
public List<Usuario> listarUsuarios() {
return this.usuarioService.findAll(); //Llamamos al servicio de usuarios que devolverá una lista de todos los usuarios del sistema (son Entidades).
} |
Devolviendo DTO con programación funcional:
| Bloque de código |
|---|
@GetMapping("api/{version}/usuarios")
public List<UsuarioDTO> listarUsuarios() {
return this.usuarioService.findAll().parallelStream().map(Usuario::toDTO).collect(Collectors.toList());
} |
...