2016-06-15 14 views
1

Ich mache einen GET HTTP Anruf zu einem Restdienst, der einen json zurückbringt. Ich möchte den JSON zu einem Scala-Objekt analysieren, aber hier blieb ich stecken. Ich bin mit dem Akka api und ich kann nicht den Inhalt aus dem Akka des ResponseEntityErhalte Inhalt von Akka ResponseEntity in Scala

Hier abzurufen verwalten ist meine sbt Datei:

name := "ScalaHttp" 

version := "1.0" 

scalaVersion := "2.11.8" 

libraryDependencies ++={ 
    val akkaV = "2.4.5" 
    Seq(
    "com.typesafe.akka"   %% "akka-http-core" % akkaV, 
    "com.typesafe.play"   %% "play-json"   % "2.4.0-M3" 
) 
} 

Und hier ist die App

import akka.actor.ActorSystem 
import akka.http.scaladsl.Http 
import akka.http.scaladsl.model.HttpRequest 
import akka.stream.ActorMaterializer 

import scala.concurrent.ExecutionContext.Implicits.global 


object Sender { 
    def main(args: Array[String]): Unit = { 

    implicit val system = ActorSystem() 
    implicit val materializer = ActorMaterializer() 

    Http().singleRequest(HttpRequest(uri = "http://declinators.com/declinator?noun=komunikacja")) foreach { 
     y => println(y.entity) 
     println(y.entity.getContentType()) 
     println(y.entity.contentType) 
    } 
    } 
} 

Diese Drucke:

HttpEntity.Strict(application/json,{"nominative":"komunikacja","genitive":"komunikacji","dative":"komunikacji","accusative":"komunikację","instrumental":"komunikacją","locative":"komunikacji","vocative":"komunikacjo"}) 
application/json 
application/json 

Hier kommen die Fragen:
1. Warum ResponseEntity liefert getContentType() und contentType()? Sie geben dasselbe zurück. 2. Den contentyType zu erhalten ist einfach, du hast zwei Möglichkeiten dafür, aber wie kann ich den Inhalt selbst bekommen, damit ich mit dem json spielen (d. H. Mit play spielen) kann!

+0

Sie können auf die Entitätsdaten mit 'y.entity.data' zugreifen, was einen' ByteString' zurückgibt. In Ihrem Fall sollte es ausreichen, einfach 'utf8String' auf dem 'ByteString' zu setzen, um eine JSON-Zeichenfolge zu erhalten, die Sie analysieren können. – thwiegan

+1

Der 'getContentType()' Getter existiert nur für Java-Kompatibilität. In Scala sollten Sie 'contentType' verwenden – WelcomeTo

Antwort