2012-06-23 4 views
10

Ich benutze Play! Framework 2.0 und ich bin neu in diesem Framework. Wie kann ich nur eine JSON-Darstellung meines Modells in einer weißen HTML-Seite zurückgeben?Spielen! Framework return json antwort

Was ich tue, ist

public static void messagesJSON(){ 
    List<Message> messages = Message.all(); 
    renderJSON(messages); 
} 

Aber ich Fehler: Es kann keine Methode Rückkehr Einheit als Handler

Antwort

10

Die Methode, die Sie von Play-1.x verwenden verwenden, ist es leicht anders in Play 2.0. Aus der Dokumentation, hier ist ein Beispiel dafür, wie eine sayHello JSON Anfrage

@BodyParser.Of(Json.class) 
public static Result sayHello() { 
    ObjectNode result = Json.newObject(); 
    String name = json.findPath("name").getTextValue(); 
    if(name == null) { 
    result.put("status", "KO"); 
    result.put("message", "Missing parameter [name]"); 
    return badRequest(result); 
    } else { 
    result.put("status", "OK"); 
    result.put("message", "Hello " + name); 
    return ok(result); 
    } 
} 

Der wichtige Teil davon ab, um zu antworten, was Sie fordern die return ok(result) die ObjectNode eine JSON zurückgibt.

+0

Was bedeutet "Index" als Rückgabetyp? Es scheint mir, dass Compiler es nicht verstehen, @BodyParser auch Fehler (Typ nicht übereinstimmen) funktioniert dieser Code für Sie? Oder könnten Sie Importe und ein breiteres Bild von Veriables zeigen? – Stas

+1

@Stas, es gab einen Tippfehler in der Quelltextdatei, es sollte "Result" wie jede "Aktion" im Play 2.0 Controller zurückgeben. – biesior

+0

Guter Platz @Marcus. Und vielen Dank für die Aktualisierung der Dokumentation auf Github. – Codemwnci

37

Wie wäre es return ok(Json.toJson(Moments.all());

+4

Dies ist eine viel nützlichere Antwort, da das gesamte Objektdiagramm automatisch in json gerendert wird - anstatt json-Objekte manuell zu erstellen, wie in der Dokumentation gezeigt. – prule

+0

Ich glaube, Sie können die JSON-Struktur auch über Jackson Annotationen anpassen. – Sudhir

+0

Fügen Sie eine Klassenreferenz hinzu: – Alex

2

ein neues Modell aus der Liste erstellen:

public static Result getBusinesses(){ 
    List<Business> businesses = new Model.Finder(String.class, Business.class).all(); 
    return ok(Json.toJson(businesses)); //displays JSON object on empty page 
} 

In der Business.java Klasse I eine statische Variable haben:

public static Finder<Long,Business> find = new Finder(Long.class, Business.class); 

Dies wird die Anzeige JSON-Objekt auf localhost: 9000/getBusinesses nach dem Hinzufügen der Route:

GET  /getBusinesses controllers.Application.getBusinesses()