2012-03-17 32 views
7

Tengo una situación en mi aplicación Play Framework donde un grupo de modelos depende de otros modelos, lo que crea peligros potenciales al tratar de serializarlos en JSON. Además, hay algunas propiedades en cada modelo, que no quiero exponer al cliente. Por último, pero no menos importante, algunas de las propiedades en la instancia de moel que recibe el cliente web no provienen realmente de la base de datos, sino de un servicio web de terceros.DTO en Play Framework

Escuché que es posible aplicar un serializador personalizado antes de representar el objeto en JSON, pero me gustaría utilizar un enfoque incluso más simple: DTO que luego se serializa a JSON.

La pregunta es, ¿dónde debería colocar la función de conversión DTO para cada clase de modelo? ¿Controlador? ¿Modelo? Quizás el mejor enfoque sería seguir la estrategia del serializador y crear algunas clases de conversión, ¿una para cada modelo?

Mi mayor temor es que los conversores también se conozcan entre sí, porque obviamente me gustaría convertir cada una de las instancias de Book en una instancia de Author en DTO primero, y luego convertir al autor en una DTO también. ¿Esto es realmente malo?

Respuesta

3

En una aplicación Java EE estándar (Spring), debe usar Dozer framework para realizar la conversión entre objetos modelo y DTO.

¡En el juego! contexto, debería colocar el DTO y los convertidores en un paquete dedicado, o en un subpaquete de models.

1

Estoy usando la clase de modelo como DTO y utilizando la anotación @NoJsonExpose para propiedades u otras dependencias de modelos que no quiero exponer.

Aquí está la implementación de la anotación @NoJsonExpose y el objeto de resultado RenderJson mejorado que lo considera.

https://play.lighthouseapp.com/projects/57987/tickets/1605-propose-nojsonexpose-annotation-to-make-renderjsoners-life-better

sólo tiene que anular el Controller 's renderJson() para utilizar el nuevo RenderJson objeto.