用Spring和Jackson将Json数组解析为Pojo?

时间:2014-04-10 16:01:12

标签: java json spring jackson pojo

我有一个Json String和一个对象数组:

{DateFormat :[{column: 0, pattern: "yyyyMMdd"},
              {column: 2, pattern: "yyyyMMdd"} ]}

我和Jackson Parser一起使用Spring MVC ..

Java Pojo看起来如何能够将这个Json String自动解析为Object?

在Spring中我通常会这样做:

public @ResponseBody String login(@RequestBody DateFormat dataFormaPojo){

}

这适用于一个简单的Json字符串,但是如何将我的对象数组解析为Java对象或带有对象的ArrayList?我希望Jackson解析器在收到json文件时自动处理它。

编辑:我已经扩展了json文件,创建了这个java类,但它没有用:

import java.io.Serializable;
public class DataFormat implements Serializable
{
    private static
    final long serialVersionUID = 1L;
    private Integer column;
    private String type;
    private String pattern;
    public Integer getColumn()
    {
        return column;
    }
    public void setColumn(Integer column)
    {
        this.column = column;
    }
    public String getType()
    {
        return type;
    }
    public void setType(String type)
    {
        this.type = type;
    }
    public String getPattern()
    {
        return pattern;
    }
    public void setPattern(String pattern)
    {
        this.pattern = pattern;
    }
}

DataFormList类

import java.io.Serializable;
import java.util.ArrayList;
import
java.util.List;
public class DataFormatList implements Serializable
{
    private static final long serialVersionUID = 2514719982327593095L;
    private List<DataFormat> DataFormat = new ArrayList<DataFormat> ();
    public List<DataFormat>  getDateFormats()
    {
        return DataFormat;
    }
    public void setDateFormats(List<DataFormat> formats)
    {
        this.DataFormat= formats;
    }
}

在春天:

@RequestMapping(value="/save",method=
{
    RequestMethod.GET,RequestMethod.POST
}
)
public @ResponseBody String createDataSource( @RequestBody DataFormatList dataFormaPojo)
{
    for(DataFormat df: dataFormaPojo.getDateFormats())
    {
        System.out.println(df.getType());
    }
    return "";
}

我得到的Json字符串如下所示:

{
    "DataFormat": [
        {
            "column": 0,
            "type": "number"
        },
        {
            "column": 1,
            "type": "number"
        },
        {
            "column": 2,
            "type": "number"
        },
        {
            "column": 3,
            "type": "number"
        }
    ]
}

如果我希望对象DataFormat具有其他名称,我可以为带有Jackson的对象设置自定义名称吗?

为什么我的类不解析json字符串?我没有收到任何错误消息。

EDIT3:如果我查看goolge chrome dev工具,我会收到400 Bad Request Message但是在Spring中我没有收到错误来自Jackson的消息,他无法将我的数据解析为Pojo ..

3 个答案:

答案 0 :(得分:0)

你需要一个像这样的对象:

public class DateFormat implements Serializable {

    private static final long serialVersionUID = 1L;

    private int column;

    private String pattern;

    public String getPattern() {
        return name;
    }

    public void setPattern(String pattern) {
        this.pattern = pattern;
    }

    public int getColumn() {
        return name;
    }

    public void setColumn(String column) {
        this.column = column;
    }
}

然后你的主要对象如:

public class DateFormatList implements Serializable {
    private static final long serialVersionUID = 2514719982327593095L;

    private List<DateFormat> dateFormats = new ArrayList<DateFormat>();

    public List<DateFormat> getDateFormats() {
        return name;
    }

    public void setDateFormats(List<DateFormat> formats) {
        this.dateFormats= formats;
    }
}

控制器中的方法如下所示:

public @ResponseBody String login(@RequestBody DateFormatList dataFormaPojo){
    ....
}

答案 1 :(得分:0)

删除成功完成后,只需使用notifydatasetchanged()即可 或者只是从适配器创建一个实例,然后访问notifydatasetchanged() 我希望这能解决你的问题

答案 2 :(得分:0)

用户对象映射器,用于获取具有相应json字符串

的java类的对象

java docs for object mapper

这里的示例可能会帮助您 enter link description here