如何解决正在使用JSON!框架控制器
| 我正在尝试使用我使用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为空”(如果不是这样的话,我就不会打扰)
到目前为止,这是非常基础的,我只想将JS中生成的数组绑定到我的JsonArray。 Play!framework具有出色的文档,但是由于某种原因,关于此特定主题的内容很少。
如果有人可以对此有所了解,将不胜感激
解决方法
您只需创建一个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执行相同的操作以支持您的特定情况。
,您有2个选项:
简单的一个:将参数作为字符串传递,然后在控制器中将其解析为Json
复杂的一:使用TypeBinder创建自己的活页夹
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。