DTO в Play Framework - PullRequest
       13

DTO в Play Framework

7 голосов
/ 18 марта 2012

В моем приложении Play Framework есть ситуация, когда куча моделей зависит от других моделей, что создает потенциальную опасность при попытке сериализовать их в JSON.Кроме того, в каждой модели есть несколько свойств, которые я не хочу показывать клиенту.И последнее, но не менее важное: некоторые свойства экземпляра moel, которые получает веб-клиент, на самом деле не из БД, а из стороннего веб-сервиса.

Я слышал, что можно применитьпользовательский сериализатор перед рендерингом объекта в JSON, но я бы хотел использовать еще более простой подход: DTO, который затем сериализуется в JSON.

Вопрос в том, куда мне поместить функцию преобразования DTO для каждого класса Model?Контроллер?Модель?Возможно, лучшим подходом было бы следовать стратегии сериализатора и создать несколько классов преобразования - по одному для каждой модели?

Я больше всего боюсь, что преобразователи должны знать друг о друге, потому что, очевидно, я бы хотелсначала поверните каждый из экземпляров Book в экземпляре Author на DTO, а затем превратите Author в DTO.Это действительно плохо?

Ответы [ 2 ]

3 голосов
/ 18 марта 2012

В стандартном приложении Java EE (Spring) вы должны использовать Dozer framework для преобразования между объектами модели и DTO.

В Play!В этом контексте я должен поместить DTO и конвертеры в отдельный пакет или в подпакет models.

1 голос
/ 16 января 2013

Я использую класс модели в качестве DTO и использую аннотацию @NoJsonExpose для свойств или других зависимостей модели, которые я не хочу раскрывать.

Вот реализация аннотации @NoJsonExpose и улучшенный объект результата RenderJson, который ее рассматривает.

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

Просто нужно переопределить Controller renderJson(), чтобы использовать новый объект RenderJson.

...