2
변경할 수없는 내부 웹 서비스에서 인터넷 클라이언트로 보내는 네트워크 트래픽을 줄이기 위해 JSON 응답을 트리밍해야합니다.스칼라 플레이 프레임 워크 2.1에서 트랜스포머를 사용하여 JsArray를 자르는 방법
JSON 응답의 특정 하위 집합 만 추출하는 웹 서비스 "릴레이". 모든 것을 한 형식에서 다른 형식으로 JSON 변환되어 발생, 나는 플레이 프레임 워크 2.1의 새로운 JSON 변압기를 사용하는 것을 선호하기 때문에
(참조 : http://www.playframework.com/documentation/2.1.1/ScalaJsonTransformers를)
이 어려움을 높이기 위해 응답이 배열입니다 서로 다른 JSON 객체로 구성되며 각 객체에서 두 개의 필드 만 필요합니다.
[
{
"keyA": "keep this value",
"keyB": [ {"value": "keep this value", "anotherValue": "keep this value" } ],
"keyC": "drop this value"
},
{
"keyA": "keep this value",
"keyB": [ {"value": "keep this value", "anotherValue": "keep this value" } ],
"keyD": "drop this value",
"keyE": "drop this value"
},
{
"keyA": "keep this value",
"keyB": [ {"value": "keep this value", "anotherValue": "keep this value" } ],
"extraRandomKeys": "drop this value",
"fieldsWhichMayNotAlwaysAppear: "drop this value"
}
]
로 :
[
{
"keyA": "keep this value",
"keyB": [ {"value": "keep this value", "anotherValue": "keep this value" } ]
},
{
"keyA": "keep this value",
"keyB": [ {"value": "keep this value", "anotherValue": "keep this value" } ]
},
{
"keyA": "keep this value",
"keyB": [ {"value": "keep this value", "anotherValue": "keep this value" } ]
}
]
내가 사용했던 템플릿 방법은 다음과 같습니다
def relayWsResponse = Action {
request =>
Async {
WS.url("http://internalhost/service")
.get()
.map(
response => {
Ok(
response.json.transform(
???
).get
)
}
)
}
}