2012-06-23 8 views
10

Я использую Play! Framework 2.0, и я новичок в этой области. Как я могу вернуть только json-представление моей модели на белой странице html?Играйте! Framework return json response

Что я делаю

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

Но я получаю ошибку: Не удается использовать метод, возвращающий Unit в качестве обработчика

ответ

10

метод вы используете из Play 1.x, это немного разные в Play 2.0. Из документации, вот пример того, как ответить на запрос 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); 
    } 
} 

важной частью этого от того, что вы спрашиваете, является return ok(result), который возвращает JSON ObjectNode.

+0

Что означает «индекс» как возвращаемый тип? Мне кажется, что компилятор этого не понимает, @BodyParser также ошибка (тип несоответствия) работает ли этот код для вас? Или вы могли бы показать импорт и более общую картину достоверности. – Stas

+1

@Stas, в исходных документах была опечатка, она должна возвращать 'Result' как каждое' действие' в контроллере Play 2.0. – biesior

+0

Хорошее место @Marcus. И спасибо за обновление документации по Github. – Codemwnci

37

Как насчет return ok(Json.toJson(Moments.all());

+4

Это гораздо более полезный ответ, поскольку он автоматически отображает весь объектный граф в json - вместо того, чтобы вручную создавать объекты json, как показано в документации. – prule

+0

Я считаю, что вы можете настроить структуру JSON, а также аннотации Jackson. – Sudhir

+0

Добавьте ссылку на класс: – Alex

2

Создать новую модель из списка:

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 
} 

В классе Business.java У меня есть статическая переменная:

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

Это будет отображать JSON объект на localhost: 9000/getBusinesses после того, как вы добавите маршрут:

GET  /getBusinesses controllers.Application.getBusinesses() 
Смежные вопросы