2016-10-19 1 views
0

Ich bin neu zu spielen (und etwas neues zu Scala), also vergib mir, wenn das ist falsch, obwohl wirklich das ist, warum ich dies hier poste.Wie man eine JSON-Ressource korrekt mit Casbah & Play 2 präsentiert

Ich versuche, einen grundlegenden Endpunkt zu schaffen, der weggeht und grundlegende CRUD mit mongodb tut.

controllers/NoteController.scala:

package controllers 

import play.api.mvc._ 
import play.api.libs.json._ 
import data.Note 

class NotesController extends Controller { 

    def index = Action { 
    Note.fetch match { 
     case Some(notes) => Ok(Json.toJson(notes)) 
     case None => NotFound 
    } 
    } 

    def show(id: Long) = Action { 
    val note = Note.fetch(id) 

    note match { 
     case Some(note) => Ok(Json.toJson(note)) 
     case None => NotFound 
    } 
    } 
} 

data/Note.scala

package data 

import com.mongodb.casbah.Imports._ 

object Note { 

    def fetch = { 
    Mongo.db("note").find 
    } 

    def fetch(id: Long) = { 
    Mongo.db("note").findOne(
     MongoDBObject("id" -> id) 
    ) 
    } 
} 

Der obige Code tatsächlich funktioniert nicht, aber ich habe gegen eine Wand mein Kopf wurde hämmern für die letzten paar Tage zu Figur versucht, wie man es schafft. Ich habe versucht, den JSON-Serializer zu verwenden, der mit casbah kommt, aber dort auch keine Freude hatte. Ich kann einfach nicht herausfinden, wie ich von den Mongo-Daten (von DBObject) zu den relevanten JSONs gelangen kann.

Edit:

Wie in einem Kommentar zu dieser Frage erwähnt, sind die oben genannten Ausgänge:

No Json serializer found for type Any. Try to implement an implicit Writes or Format for this type. 

Wenn es das der Punkt, in dem Code wird es versucht, wird note als Json zu serialisiert: Ok(Json.toJson(note))

+0

Was gibt dieser Code aus? Ich habe noch nicht versucht, mit Mongo zu spielen, aber ich weiß, dass Json.toJson entweder einen String im JSON-Format oder ein einfaches Objekt ("Bean") in JSON konvertiert. Also würde ich vermuten, dass Note.fetch keines dieser Dinge zurückgibt? –

+0

Nein, dies ist eine vereinfachte Version von dem, was ich habe, aber effektiv nur das, was ich versuche zu tun, ich vermute es Fehler zu sagen, es ist ein unangemessener Wert zu übergeben "Json.toJson". Ich werde es laufen lassen und die Ausgabe jetzt in die Frage stellen. – danbroooks

+0

Ich würde den moderneren MongoDB Scala Treiber (http://mongodb.github.io/mongo-scala-driver) empfehlen. Die Klasse 'Document' verfügt über eine toJson-Methode, die die Erstellung der Json-Zeichenfolgen vereinfachen würde. – Ross

Antwort

0

Ich schlage vor, dass Sie den erwarteten Rückgabetyp für alle von Ihnen verwendeten Methoden deklarieren. Es zeigt dir, wo dein Problem ist. Ich schätze, Sie denken, dass Sie eine List[JsValue] von Node.fetch zurückgeben, aber Sie geben tatsächlich Any aus irgendeinem Grund zurück.

Verwandte Themen