2012-03-17 2 views
7

많은 모델이 다른 모델에 의존하는 Play Framework 애플리케이션에 상황이있어 JSON에 직렬화하려고 할 때 위험이 발생할 수 있습니다. 또한 모든 모델에는 고객에게 공개하고 싶지 않은 몇 가지 속성이 있습니다. 마지막으로 웹 클라이언트가받는 moel 인스턴스의 일부 속성은 실제로 DB에서 오는 것이 아니라 제 3 자 웹 서비스에서 오는 것입니다.Play Framework의 DTO

개체를 JSON으로 렌더링하기 전에 사용자 지정 serializer를 적용 할 수 있다고 들었지만 더욱 간단한 방법 인 DTO를 사용하여 JSON에 직렬화합니다.

모든 모델 클래스에 대해 DTO 변환 함수를 사용해야하는 위치는 어디입니까? 제어 장치? 모델? 어쩌면 최선의 방법은 시리얼 라이저 전략을 따르고 각 모델에 대해 하나씩 몇 가지 변환 클래스를 만드는 것입니다.

가장 큰 두려움은 컨버터 인스턴스가 서로에 대해 잘 알아야한다는 것입니다. 왜냐하면 분명히 저자 인스턴스의 각 Book 인스턴스를 DTO로 변환 한 다음 DTO에서 작성자를 전환하고 싶기 때문입니다. 이게 정말 나쁜가요?

답변

3

표준 Java EE 앱 (Spring)에서 모델 개체와 DTO간에 변환하려면 Dozer framework을 사용해야합니다.

Play! DTO와 변환기는 전용 패키지 또는 서브 패키지 models에 배치해야합니다.

1

모델 클래스를 DTO로 사용하고 노출하고 싶지 않은 속성 또는 기타 모델 종속성에 @NoJsonExpose 주석을 사용하고 있습니다.

여기에는 @NoJsonExpose 주석의 구현과이를 고려한 향상된 RenderJson 결과 개체가 있습니다.

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

는 그냥 ControllerrenderJson() 새로운 RenderJson 개체를 사용하여 오버라이드 (override) 할 필요가있다.