2013-02-18 1 views
2

저는 스칼라 2.10, Salat 및 Play frmework 2.1-RC2를 사용하여 응용 프로그램을 작성하고 있습니다 (곧 2.1 릴리스로 업그레이드 예정).)와 MongoDB.JSON을 스칼라 클래스 (사례 클래스가 아닌)로 변환 한 다음 해당 큰 클래스의 사례 클래스 집합을 채우는 방법

이것은 JSON 웹 서비스가 소비자에게 노출되는 안면 응용 프로그램입니다. 지금까지 JSON은 Play의 Json API와 암시 적 변환기를 사용하여 직접 Model 객체로 변환되었습니다. 22 튜플 한도를 피하기 위해 몇 가지 사례 클래스를 리팩터링해야하고 이제 플랫 케이스 클래스 대신 리팩토링하여 임베디드 케이스 (및 임베디드 MongoDB 컬렉션)를 갖게되었습니다.

웹 서비스 인터페이스는 클라이언트가 JSON 데이터를 이전과 같이 평면 구조로 전달해야하지만 응용 프로그램을 적절한 사례 클래스 구조로 매핑해야하는 경우와 동일하게 유지되어야합니다. 이런 상황을 처리하는 가장 좋은 방법은 무엇입니까? 복잡한 케이스 클래스에서 플랫 JSON 출력으로 변환 코드 < -> Flat JSON < -> 복잡한 케이스 클래스 구조 < -> 많은 변환 코드를 작성하는 것에 대해 두려워합니다.

어떻게 이러한 요구 사항에 접근합니까? 나는 이런 종류의 요구 사항을 다루기 위해 다른 많은 사람들이 튜토리얼 클래스 22 튜플 한계에 직면했을 것이라고 생각한다. 이 접근 방법은 무엇입니까

답변

1

Play 2.1 json 라이브러리는 연결자 (path1 and path2)에 크게 의존합니다. 이러한 조합자는 모두 동일한 22 제한을 갖습니다.

  1. 콤비를 사용하여 객체 어려운 방법을 구성하지 마십시오 : path(json) 경로에서 그 시점에서 당신에게 가치를 줄 것이다 당신에게 두 가지 옵션을 제공합니다. 'JsPath 값 접근하기'를 ScalaJsonCombinators으로 검색하면 더 많은 예제가 제공됩니다.
  2. 먼저 JSON을 단일 개체에 22 개 이상의 값이없는 구조로 변환 한 다음 일반 결합자를 사용합니다. 변형에 대한 자세한 내용은 여기를 참조하십시오. ScalaJsonTransformers
+0

감사의 말 EECOLOR. 따라서 경로를 중첩 된 사례 클래스에 수동으로 매핑하는 첫 번째 방법에 접근 한 다음 응답에 대해 다시 중첩 된 사례 클래스를 플랫 JSON에 매핑하겠습니까? – user2066049

+0

나는 내가 무엇을 할 것인지 잘 모른다. 한 손으로 나는 json에게 나의 사례 클래스의 구조를 반영하길 바란다. 이 경우 변환이 더 좋을 것입니다. 반면에 두 번 변환하는 것은 잘못된 것입니다 (json -> json -> case 클래스). MongoDB를 사용한다고 언급했는데 MongoDB json으로 직접 변환 할 수 있습니까? – EECOLOR

+0

원래는 들어오는 JSON을 MongoDB에 직접 버려두고 Mongo JSON을 소비자에게 보냈습니다. 하지만 강력하게 형식화 된 JSON 매핑 된 객체를 가지고 있으면 확인이 필요했습니다. 매핑 된 객체를 통해 JSON 문서를 앱의 다른 부분으로 전달할 수 있습니다. 들어오는 JSON을 수동으로 복잡한 사례 클래스에 매핑 할 수 있지만 Mongo에서 보내는 응답을 직접 보낼 수 있습니다. 소비자 (사례 객체로 매핑되지 않음)? 모든 DB 연산은 케이스 객체를 받아들이고 케이스 객체를 반환하는 Salat API를 통해 발생하기 때문입니다. 어떤 방향으로 나아갈 지 결정하는 재미있는 결정은 무엇입니까? – user2066049