在游戏中消耗JSON!框架控制器

时间:2011-05-26 01:50:09

标签: java javascript json playframework

我正在尝试使用我使用JavaScript创建的JSON数组,但该数组从未在我的控制器中绑定

以下是我用来调用控制器操作的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为null”(如果不是的话,我不会扭动这个)

到目前为止,我只是想将JS中生成的数组绑定到我的JsonArray。 Play!framework有很好的文档,但由于某些原因,这个特定的主题很少。

如果有人能对此有所了解,我将不胜感激

2 个答案:

答案 0 :(得分:17)

您只需创建一个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执行相同操作以支持您的特定情况。

答案 1 :(得分:4)

您有两个选择:

  • simple one:将参数作为String传递,并在控制器中将其解析为Json
  • 复杂的一个:使用TypeBinder
  • 创建自己的活页夹