【问题标题】:Consuming JSON in play! framework controller在游戏中使用 JSON!框架控制器
【发布时间】:2011-09-02 05:42:37
【问题描述】:

我正在尝试使用我使用 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 is null”(如果不是这样,我就不会扭动这个)

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

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

【问题讨论】:

    标签: java javascript json playframework


    【解决方案1】:

    您只需创建一个 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】:

      你有两个选择:

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

      【讨论】:

      • KISS 通常对我很有用。所以我最终传递了一个像这样的简单字符串:filterParams:"milk=chevre&pate=molle" 并使用 String.split() 方法在控制器中解析它。
      猜你喜欢
      • 1970-01-01
      • 2013-05-14
      • 2014-04-16
      • 1970-01-01
      • 1970-01-01
      • 2011-11-09
      • 2019-04-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多