2016-10-27 6 views
0

나는 akka http를 사용하고 있습니다.ToResponseMarshaller in Akka http

{ "ok" : "true", "content" : "..." } 

{ "ok" : "false", "content" : "..." } 

을 그리고 또한 내가 일하기 위해 코드을 가지고 싶다 :

sealed abstract class ApiResponse[A](val content: A, val code: Int) 

final case class Success[A](override val content: A, override val code: Int) extends ApiResponse(content, code) 

final case class Failure[A](override val content: A, override val code: Int) extends ApiResponse(content, code) 

내가 그들 각각 다음 jsons에 정렬 화하고 싶은 내 API 층에서 나는 다음과 같은 클래스를 정의 응답에서 http 상태 코드로 설정합니다. 이 ToReponseMarshaller를 정의하려고했지만 내 문제의 올바른 선택인지 확실하지 않습니다.

답변

1

이것을 위해 spray-json과 Akka-http 통합을 사용하는 것이 좋습니다.

val route = 
    path("something") { 
    complete(Response("false", "some content")) 
    } 
: 당신의 경로에

trait ResponseJsonProtocol extends SprayJsonSupport with DefaultJsonProtocol { 
    implicit val responseFormat = jsonFormat2(Response) 
} 

그리고 사용이 :

case Response(ok: String, content: String) 

이 그럼 당신은 AA JsonProtocol을 작성해야합니다 : 당신은 당신의 경우 클래스 당신이 당신의 JSON 객체를 원하는 같은 방법을 정의해야합니다

다른 상태 코드로 응답하려면 터플을 완료하여 다음과 같이 완료하십시오.

이 0
complete { 
    StatusCodes.BandwidthLimitExceeded -> MyCustomObject("blah blah") 
} 

필수 수입은 다음과 같습니다

libraryDependencies += "com.typesafe.akka" % "akka-http-spray-json-experimental_2.11" % "2.4.11" 
+0

가 어떻게 솔루션을 사용하여 다른 상태 코드를 설정할 수 있습니다

import akka.http.scaladsl.marshallers.sprayjson.SprayJsonSupport import spray.json._ 

또한, 새로운 의존성을 가지고해야합니까? – user3763116

+0

필요한 값을 가진'Response' 인스턴스 만 있으면됩니다. 응답 ("false", "some content")'또는'Response ("true", "some other content")'을하면'{ "ok": "false", "content": " 일부 콘텐츠 "}'또는'{"ok ":"true ","content ":"다른 콘텐츠 "}' – hveiga

+0

HTTP 상태 코드에 대해 묻습니다. – user3763116

관련 문제