2012-06-23 33 views
10

Tôi đang sử dụng Play! Framework 2.0 và tôi mới trong khuôn khổ này. Làm thế nào tôi có thể trở lại chỉ là một đại diện json của mô hình của tôi trong trang html trắng?Phát! Khung trả về trả lời json

Những gì tôi đang làm là

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

Nhưng tôi nhận được Lỗi: Không thể sử dụng một phương pháp trở về đơn vị như một Handler

Trả lời

10

Phương pháp bạn đang sử dụng là khỏi Play 1.x, nó là hơi khác nhau trong Play 2.0. Từ các tài liệu, đây là một ví dụ về làm thế nào để trả lời một yêu cầu 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); 
    } 
} 

Phần quan trọng của việc này từ những gì bạn đang yêu cầu các return ok(result) mà trả về một JSON ObjectNode là.

+0

"chỉ mục" có nghĩa là loại trả về là gì? Dường như với tôi rằng trình biên dịch không hiểu nó, @BodyParser cũng lỗi (loại không khớp) mã này hoạt động cho bạn? Hoặc bạn có thể hiển thị nhập khẩu và hình ảnh rộng hơn của veriables. – Stas

+1

@Stas, có lỗi đánh máy trong tài liệu nguồn, nó sẽ trả về 'Kết quả' như mọi' hành động' trong bộ điều khiển Play 2.0. – biesior

+0

Điểm tốt @Marcus. Và cảm ơn bạn đã cập nhật tài liệu trên Github. – Codemwnci

37

Làm thế nào về return ok(Json.toJson(Moments.all());

+4

Đây là một câu trả lời hữu ích hơn vì nó sẽ tự động hiển thị toàn bộ đồ thị đối tượng vào json - thay vì phải tự xây dựng các đối tượng json như được hiển thị trong tài liệu. – prule

+0

Tôi tin rằng bạn cũng có thể tùy chỉnh cấu trúc JSON thông qua chú thích Jackson. – Sudhir

+0

Thêm tham chiếu lớp học: – Alex

2

Tạo một mô hình mới từ danh sách của bạn:

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 
} 

Trong lớp Business.java Tôi có một biến tĩnh:

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

này sẽ hiển thị Đối tượng JSON trên localhost: 9000/getBusinesses sau khi bạn thêm tuyến đường:

GET  /getBusinesses controllers.Application.getBusinesses() 
Các vấn đề liên quan