2012-03-17 18 views
7

Ho una situazione nell'applicazione Play Framework in cui un gruppo di modelli dipende da altri modelli, il che crea potenziali pericoli quando si tenta di serializzarli su JSON. Inoltre, ci sono alcune proprietà in ogni modello, che non voglio esporre al cliente. Infine, ma non meno importante, alcune proprietà nell'istanza di moel che il client Web riceve non provengono realmente dal DB, ma da un servizio Web di terze parti.DTO in Play Framework

Ho sentito che è possibile applicare un serializzatore personalizzato prima di rendere l'oggetto a JSON, ma mi piacerebbe usare un approccio ancora più semplice: DTO che viene serializzato su JSON.

La domanda è: dove devo posizionare la funzione di conversione DTO per ogni classe del modello? Controllore? Modello? Forse l'approccio migliore sarebbe seguire la strategia del serializzatore e creare alcune classi di conversione, una per ogni modello?

Il mio più grande timore è che anche i convertitori debbano conoscersi l'un l'altro, perché ovviamente mi piacerebbe trasformare prima ciascuna istanza di Book in un'istanza di Author in DTO, e poi girare l'Author in un DTO. E 'davvero brutto?

risposta

3

In un'app Java EE standard (Spring), è necessario utilizzare Dozer framework per eseguire la conversione tra oggetti modello e DTO.

Nel gioco! contesto, dovrei inserire il DTO ei convertitori in un pacchetto dedicato o in un sotto pacchetto di models.

1

Sto utilizzando la classe del modello come DTO e utilizzo dell'annotazione @NoJsonExpose per le proprietà o altre dipendenze del modello che non desidero esporre.

Ecco l'implementazione dell'annotazione @NoJsonExpose e l'oggetto risultato RenderJson migliorato che lo considera.

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

solo bisogno di ignorare s' renderJson() il Controller per utilizzare il nuovo RenderJson oggetto.