Потребление JSON в игре!рамочный контроллер - PullRequest
6 голосов
/ 26 мая 2011

Я пытаюсь использовать массив JSON, который я создал с помощью JavaScript, но этот массив никогда не связывается в моем контроллере

Вот код JavaScript, который я использую для вызова действия моего контроллера

$.post("/produits_ajax",{filterParams:[{name:"milk", value:"chevre"}, {name:"pate", value:"molle"}]},
function(data){
    $('.dynamicContent').html(data);
slideProducts();
// initialize scrollable
$(".scrollable").scrollable();

});

Моя запись в файле маршрутов

POST        /produits_ajax       Application.produitsAjax

Вот как я получаю ее в своей игре!контроллер.Я использую play 1.1, а JsonArray - из com.google.gson.JsonArray

public static void produitsAjax(JsonArray filterParams) {
    if(filterParams != null)
        Logger.debug("Le Json: " + filterParams.toString());
    else
        Logger.debug("filterParams is null");

    render();
}

Как вы можете себе представить, я всегда получаю "filterParams is null" в моей консоли (я бы не стал писать этоесли бы не я)

Пока это очень просто, я просто хочу связать массив, сгенерированный в JS, с моим JsonArray.У Play! Framework есть отличная документация, но по какой-то причине очень мало по этому конкретному вопросу.

Если кто-нибудь сможет пролить свет на это, то будет очень признателен

Ответы [ 2 ]

17 голосов
/ 28 мая 2011

Вам просто нужно создать класс TypeBinder, чтобы добавить возможность привязки JsonObject в Play !.На самом деле, это довольно легко достичь в Play 1.2.Вот полный класс:

@Global
public class JsonObjectBinder implements TypeBinder<JsonObject> {

    @Override
    public Object bind(String name, Annotation[] annotations, String value, Class actualClass, Type genericType) throws Exception {
        return new JsonParser().parse(value);
    }

}

Вот и все!С аннотацией @Global, Play найдет ее во время загрузки и зарегистрирует ее в других папках.Я использую это в своем контроллере со следующей подписью:

public static void handleJsonBody(JsonObject body) {
    ...
}

Тело будет автоматически проанализировано Play.Вы можете сделать то же самое для JsonArray, чтобы поддержать ваш конкретный случай.

4 голосов
/ 26 мая 2011

У вас есть 2 варианта:

  • простой: передать параметр в виде строки и в контроллере проанализировать его в Json
  • сложный: создать собственное связующее с помощью TypeBinder
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...