для создания JSON вам нужно использовать json marshaller, например upickle , spray-json .Я использую спрей JSON для преобразования классов Scala в JSON и наоборот.Я предполагаю, что Service2 принимает {"name": "paul"} как запрос и возвращает {"Существовать": true} как ответ.
import spray.json.{DefaultJsonProtocol, RootJsonFormat}
case class NameExistsRequest(name: String)
case class NameExistsResponse(exist: Boolean)
object ServiceJsonProtocolNameExists extends DefaultJsonProtocol{
implicit val nameExistsRequestJF: RootJsonFormat[NameExistsRequest] = jsonFormat1(NameExistsRequest)
implicit val nameExistsResponseJF: RootJsonFormat[NameExistsResponse] = jsonFormat1(NameExistsResponse)
}
case object NameExistsError extends RuntimeException with NoStackTrace
case object InternalError extends RuntimeException with NoStackTrace
def sendNameExistsRequest(): Future[NameExistsResponse] = {
import ServiceJsonProtocolNameExists._
import spray.json._
val endpoint = "http://your-endpoint"
val request = NameExistsRequest("paul")
val httpRequest = HttpRequest(
method = HttpMethods.POST,
uri = Uri(endpoint),
headers = List.empty,
entity = HttpEntity(ContentTypes.`application/json`, request.toJson.toString)
)
Http().singleRequest(httpRequest).transformWith {
case Success(response) =>
response match {
case HttpResponse(StatusCodes.OK, _, entity, _) =>
Unmarshal(entity).to[String].map {content =>
content.parseJson.convertTo[NameExistsResponse]
}
case res =>
println("failure response: " + res)
Future.failed(NameExistsError)
}
case Failure(f) =>
println("failed to send request, caused by: " + f)
Future.failed(InternalError)
}
}
, который NameExistsRequest представляет ваш запрос, и мы преобразуем его в json с помощью метода toJson, а NameExistsResponse - ваш ответ, возвращенный Service2.мы используем Unmarshall и convertTo для преобразования json в класс scala.