2017-04-30 7 views
1

사전 빌드 된 JsonArray를 반환하여 get 요청을 완료하려고하며 스트림하는 방법을 찾습니다. 내가 쉽게 오류없이 요청을 완료하고 내가 지금처럼 문자열로 JsonArray를 변환하는 경우 JSON을 반환 할 수 있습니다 그러나scala akka-http - 미리 빌드 된 json 객체로 요청을 완료하고 스트림합니다.

get { 
    path("getJsonData") { 
    parameterMap { 
     params => 
     complete(HttpEntity(ContentTypes.`application/json`, myJsonArray.toString)) 
    } 
    } 
} 

, 나는 때문에, 문자열로 변환하지 않도록하고, JsonArray를 스트리밍 할 수 있도록하고 싶습니다 결과 JsonArray가 매우 커질 수 있습니다.

JsonArray는 개별 JsonObjects에서 처음부터 만들어 지므로 사례 클래스를 사용하지 않으므로 설명서에있는 표준 접근 방식을 사용할 수 없습니다.

저는 Akka Http를 처음 접했고이 문제를 해결할 수있는 간단한 방법이 있는지 확실하지 않아 도움이되었습니다.

답변

0

아래에서는 JSON 배열의 각 요소를 별도의 HTTP 청크로 스트리밍합니다.

  • JSON을 보내고 prettyPrint의 선택은 사용자의 요구에 맞게 재 방문 할 수 있습니다 것을

     complete(HttpEntity(ContentTypes.`application/json`, 
         Source(myJsonArray.elements).map(j ⇒ ByteString(j.prettyPrint)))) 
    

    참고.

  • Akka Streams API를 사용하여 요소를 일괄 처리하여 프레임 크기를 조정할 수 있습니다.