如何从play框架控制器中的单个JsonNode获取不同bean中的值

时间:2013-07-11 11:11:12

标签: java ajax json playframework

我正在使用Java的Play框架。我有jquery ajax发布我的数据(String表示JsonNode)。我正在我的控制器类中编写一个动作方法来提供这个ajax调用。

我面临的问题是,我使用jquery ajax发送的数据有10个文本字段值。我有3个bean类(即,MyClass1 , MyClass2 , MyClass3 ) that together have all these 10 variables to capture those textfield values. If I had only a single bean(say, MyClass1`),其中定义了10个变量,我可以这样编写:

JsonNode json = request().body().asJson();
MyClass1 obj1 = Json.fromJson(json, MyClass1.class);

并轻松访问obj1的值。

但是我有3个bean,在第一个bean中我有3个变量,在第二个5个变量中,在第3个变量中。这会产生问题。

如何以MyClass1 obj1MyClass2 obj2MyClass3 obj3以适当方式并根据需要获取这10个文本字段值。换句话说,我如何实现JsonNode的分割。或类似的东西在所有3个bean中获得适当的值。

任何帮助或任何线索都非常感谢。提前致谢。 可以做些什么来获得这些?

1 个答案:

答案 0 :(得分:0)

嗯,这个问题的答案非常简单。我做的是 我在bean MyClass1中添加了以下两行:

public MyClass2 m2;
public MyClass3 m3;

我将代码保存在我的控制器的json方法中,就像之前一样,即:

JsonNode json = request().body().asJson();
MyClass1 obj1 = Json.fromJson(json, MyClass1.class);

在jquery中我创建了一个复杂的json var(注意:请看下面的data1):

var data1 = {
    "dataField1": dataField1,
    "dataField2": dataField2,
    "dataField3": dataField3,
    "data2": data2,
    "data3": data3
}

var data2 = {
    "dataField4": dataField4,
    "dataField5": dataField5,
    "dataField6": dataField6,
    "dataField7": dataField7,
    "dataField8": dataField8
}

var data3 = {
    "dataField9": dataField9,
    "dataField10": dataField10
}

然后在进行ajax调用时只需将data1传递为:

$.ajax({
    url: '/myUrl/data1',
    type: 'POST',
    data: JSON.stringify(data1),
    contentType: "application/json",
    ..
    ..
    ..
});

现在在控制器的json方法中,我可以访问obj1.m2obj1.m3并可以解决我的问题。 (无需考虑拆分JsonNode。)