2017-07-09 2 views
1

Ich las die Finatra Einstiegsanleitung und ich konnte den HelloWorld Service und seinen Feature Test schreiben.Finatra FeatureTests: Wie man die zurückgegebene JSON manuell deserialisiert

Derzeit mein Feature-Test sieht aus wie

server.httpPost(
    path = "/hi", 
    postBody = """{"name": "Foo", "dob": 136190040000}""", 
    andExpect = Ok, 
    withBody = """{"msg":"Hello Foo. You are 15780 days old today"}""") 

Dies funktioniert gut, und meine Tests bestehen. Meine Anforderung ist jedoch, dass ich das vom Server zurückgegebene JSON entpacke und dann die Assets für das zurückgegebene Objekt manuell durchführe.

änderte ich meinen Code

val response = server.httpPost(
    path = "/hi", 
    postBody = """{"name": "Abhishek", "dob": 136190040000}""", 
    andExpect = Ok, 
    withBody = """{"msg":"Hello Abhishek. You are 15780 days old today"}""") 
    val json = response.contentString 

Dies funktioniert auch und ich kann die json kehrte Seite die Variable json sehen.

Meine Frage ist, dass wenn ich dieses JSON in ein Objekt deserialisieren muss. Soll ich einfach eine beliebige json-Bibliothek wie circe einbinden? und dann das Objekt deserialisieren?

oder kann ich das Jackson-Framework verwenden, das in Finatra kommt.

In allen Beispielen, die ich finden konnte, sehe ich, dass Finatra "automatisch" die json Serialisierung und Deserialisierung handhabt. Aber in meinem Fall möchte ich das manuell durchführen.

Antwort

1

Sie können die FinatraObjectMapper verwenden, indem Sie (mit Ihrem Beispiel) server.mapper aufrufen. Das wickelt einen Jackson ObjectMapper, den Sie verwenden könnten, wenn Sie die Jackson-Bibliothek ohne die Add-ons von Finatra verwenden wollten.

Oder Sie können eine andere JSON-Bibliothek importieren. Wenn Sie SBT verwenden, können Sie Bibliotheken auf bestimmte Bereiche des Codes beschränken, wenn Sie also circe nur im Testcode verwenden möchten, können Sie die folgenden Ihre build.sbt

"org.scalatest" %% "scalatest" % "2.2.6" % "test"

hinzufügen
Verwandte Themen