2012-03-17 33 views
7

Tôi có một tình huống trong ứng dụng Khung Play của tôi, nơi một loạt các mô hình phụ thuộc vào các mô hình khác, điều này tạo ra các mối nguy hiểm tiềm tàng khi cố gắng tuần tự hóa chúng thành JSON. Ngoài ra, có một vài thuộc tính trong mỗi mô hình, mà tôi không muốn để lộ cho khách hàng. Cuối cùng, nhưng không kém phần quan trọng, một số thuộc tính trong cá thể moel mà trình khách web nhận được không thực sự đến từ DB, mà là từ một dịch vụ web của bên thứ ba.DTO trong Khung Chơi

Tôi nghe nói rằng có thể áp dụng bộ nối tiếp tùy chỉnh trước khi hiển thị đối tượng thành JSON, nhưng tôi muốn sử dụng cách tiếp cận đơn giản hơn: DTO sau đó được tuần tự hóa thành JSON.

Câu hỏi đặt ra là tôi nên đặt hàm chuyển đổi DTO cho mọi kiểu Mô hình ở đâu? Bộ điều khiển? Mô hình? Có lẽ cách tiếp cận tốt nhất là làm theo chiến lược serializer và tạo một vài lớp chuyển đổi - một cho mỗi Model? Một trong những nỗi sợ lớn nhất của tôi là những người chuyển đổi nên biết về nhau, bởi vì rõ ràng là tôi muốn biến từng cá thể Book trong một cá thể Author thành DTO trước, và sau đó biến Author in a DTO là tốt. Điều này thực sự xấu?

Trả lời

3

Trong ứng dụng Java EE chuẩn (Spring), bạn nên sử dụng Dozer framework để thực hiện chuyển đổi giữa các đối tượng mô hình và DTO.

Trong Play! ngữ cảnh, tôi nên đặt DTO và bộ chuyển đổi trong một gói chuyên dụng hoặc trong một gói con của models.

1

Tôi đang sử dụng lớp mô hình làm DTO và sử dụng chú thích @NoJsonExpose cho thuộc tính hoặc các phụ thuộc mô hình khác mà tôi không muốn hiển thị.

Dưới đây là việc triển khai chú thích @NoJsonExpose và đối tượng kết quả được cải thiện RenderJson xem xét đối tượng đó.

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

Chỉ cần ghi đè 's renderJson()Controller để sử dụng đối tượng mới RenderJson.