通过play.data.Form将JSON转换为JAVA对象

通过play.data.Form将JSON转换为JAVA对象,java,json,spring,playframework,Java,Json,Spring,Playframework,我不知道该怎么处理这个问题。 我有一个JSON对象来帮助通过POST(使用Play Framework)输入值,其结构如下: { "start_absolute": 1403185486254, "end_absolute": 1403185486254, "metrics": [ { "name": "parts", "tags": [ {

我不知道该怎么处理这个问题。 我有一个JSON对象来帮助通过POST(使用Play Framework)输入值,其结构如下:

{
    "start_absolute": 1403185486254,
    "end_absolute": 1403185486254,
    "metrics": [
        {
            "name": "parts",
            "tags": [
                {
                    "key":"machine",
                    "value":"10"
                }
            ],
            "sampling": 
               {
                   "value": 1,
                   "unit": "minutes"
               }
         }
    ]
}
    Form<QueryForm> queryForm = Form.form(QueryForm.class).bindFromRequest();

    if (queryForm.hasErrors()) {
        return badRequest(queryForm.errorsAsJson());
    }

    QueryForm queryInfo = queryForm.get();
在服务器端,我尝试如下处理信息:

{
    "start_absolute": 1403185486254,
    "end_absolute": 1403185486254,
    "metrics": [
        {
            "name": "parts",
            "tags": [
                {
                    "key":"machine",
                    "value":"10"
                }
            ],
            "sampling": 
               {
                   "value": 1,
                   "unit": "minutes"
               }
         }
    ]
}
    Form<QueryForm> queryForm = Form.form(QueryForm.class).bindFromRequest();

    if (queryForm.hasErrors()) {
        return badRequest(queryForm.errorsAsJson());
    }

    QueryForm queryInfo = queryForm.get();

我没有使用play.data.Form的经验,但在以前使用更简单对象(使用基本数据类型和字符串)的ocation中,这很好,但当我尝试发布到play应用程序(Header:Content-Type=application/json;charset=utf-8)时,出现了一个内部服务器错误:

play.api.Application$$anon$1: Execution exception [[InvalidPropertyException: 
Invalid property 'metrics[0].tags[0]' of bean class [model.QueryForm]: Illegal 
attempt to get property 'tags' threw exception; nested exception is 
org.springframework.beans.NullValueInNestedPathException: Invalid property 
'metrics[0].tags' of bean class [model.QueryForm]: Could not instatiate property
path: 
java.lang:InstatiationException: [model.Tag]
有人能帮忙吗?我不知道该怎么办。从JSON转换对象是复杂的吗?我是否需要添加一些JSON注释(当前未使用)

我不知道如何解决这个问题


更新:我把它缩小到标签类。由于某些原因,我无法通过JSON稳定标记。我甚至尝试过将单个标记实例设置为与日期相同的级别,但它给出了相同的错误(它适用于采样)

决议:

答案在上面的帖子里。我必须在Tag类中设置一个空构造函数,它才能工作

public Tag(){

}

异常意味着一个或多个属性没有实例化

private List<MetricForm> metrics = new ...;
private List<Tag> tags = new ...;
private RelativeTimeForm sampling = new ...;
private List metrics=new。。。;
私有列表标签=新。。。;
私有相对论形式抽样=新。。。;
我应该这样做


如果您在读取时间值时遇到问题:我将使用
long
读取时间值,然后(内部)将它们转换为
Date
对象,而不是直接使用
Date
类型来读取时间值

使用GSON将JSON转换为java对象您看到了吗?是的,但我没有在对象中的对象列表中找到作为对象的示例(我把它缩小到标记类。出于某种原因,我无法通过JSON稳定标记。我甚至尝试将单个标记实例设置为与日期相同的级别,它给出了与您告诉我的相同的错误,但错误是相同的。我用完整的类更新了帖子。注意:日期对象捕捉得很好,但我有那一个。
public Tag(){

}
private List<MetricForm> metrics = new ...;
private List<Tag> tags = new ...;
private RelativeTimeForm sampling = new ...;