2012-06-23 20 views
10

Sto usando Play! Framework 2.0 e sono nuovo in questo framework. Come posso restituire solo una rappresentazione json del mio modello in una pagina bianca html?Gioca! Framework response response json

Quello che sto facendo è

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

ma ottengo l'errore: Non è possibile utilizzare un metodo che restituisce unità come Handler

risposta

10

Il metodo che si sta utilizzando è da Play 1.x, è leggermente diverso in Play 2.0. Dalla documentazione, ecco un esempio di come rispondere a una richiesta di sayHello JSON

@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); 
    } 
} 

La parte importante di questo da quello che si sta chiedendo è il return ok(result) che restituisce un JSON ObjectNode.

+0

Che cosa significa "indice" come tipo di reso? Mi sembra che il compilatore non lo capisca, @BodyParser anche errore (tipo mancata corrispondenza) funziona questo codice per te? Oppure potresti mostrare le importazioni e un'immagine più ampia di valori. – Stas

+1

@Stas, c'era un errore nei documenti sorgente, dovrebbe restituire 'Result' come ogni' azione' nel controller di Play 2.0. – biesior

+0

Buon posto @Marcus. E grazie per aver aggiornato anche la documentazione su Github. – Codemwnci

37

Come su return ok(Json.toJson(Moments.all());

+4

Questa è una risposta molto più utile dal momento che renderà automaticamente l'intero grafo degli oggetti in json - piuttosto che dover costruire manualmente oggetti JSON come mostrato nella documentazione. – prule

+0

Credo che sia possibile personalizzare la struttura JSON anche tramite le annotazioni di Jackson. – Sudhir

+0

Aggiungere un riferimento classe: – Alex

2

creare un nuovo modello dalla lista:

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 
} 

Nella classe Business.java ho una variabile statica:

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

Questo visualizzerà la Oggetto JSON su localhost: 9000/getBusinesses dopo aver aggiunto il percorso:

GET  /getBusinesses controllers.Application.getBusinesses() 
Problemi correlati