2012-06-23 15 views
10

Używam Play! Framework 2.0 i jestem nowy w tych ramach. Jak mogę przywrócić tylko jsonową reprezentację mojego modelu na białej stronie html?Graj! Framework return json response

Co robię jest

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

Ale otrzymuję błąd: Nie można użyć metody powracającego Jednostka jako Handler

Odpowiedz

10

Sposób korzystania z gry jest 1.x, jest lekko inny w Play 2.0. Z dokumentacji, tutaj jest przykładem, w jaki sposób odpowiedzieć na żądanie 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); 
    } 
} 

Ważną częścią tego z co prosicie jest return ok(result) która zwraca JSON ObjectNode.

+0

Co to znaczy "indeks" jako typ zwrotu? Wydaje mi się, że kompilator tego nie rozumie, @BodyParser również błąd (typ niezgodności) czy ten kod działa dla Ciebie? Czy mógłbyś pokazać import i szerszy obraz veriabli. – Stas

+1

@Stas, w dokumentach źródłowych był literówka, powinna zwracać 'Wynik' jako każde' działanie' w kontrolce Play 2.0. – biesior

+0

Dobre miejsce @ Marcus. I dziękuję za aktualizację dokumentacji na Githubie. – Codemwnci

37

Jak o return ok(Json.toJson(Moments.all());

+4

Jest to o wiele bardziej przydatna odpowiedź, ponieważ automatycznie renderuje cały wykres obiektu do json - zamiast ręcznego budowania obiektów json, jak pokazano w dokumentacji. – prule

+0

Uważam, że można dostosować strukturę JSON, również za pomocą adnotacji Jacksona. – Sudhir

+0

Dodaj odniesienie do klasy: – Alex

2

utworzyć nowy model z listy:

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 
} 

w klasie Business.java Mam zmienną statyczną:

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

To spowoduje wyświetlenie Obiekt JSON na localhost: 9000/getBusinesses po dodaniu trasy:

GET  /getBusinesses controllers.Application.getBusinesses() 
Powiązane problemy