我正在尝试使用我使用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有很好的文档,但由于某些原因,这个特定的主题很少。
如果有人能对此有所了解,我将不胜感激
答案 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)
您有两个选择: