【问题标题】:Parse Json Array to Pojo with Spring and Jackson?使用 Spring 和 Jackson 将 Json 数组解析为 Pojo?
【发布时间】:2014-05-24 11:06:35
【问题描述】:

我有这个带有对象数组的 Json 字符串:

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

我使用带有 Jackson Parser 的 Spring MVC..

Java Pojo 必须如何看起来才能自动将这个 Json 字符串解析为一个对象?

在春天,我通常会这样做:

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 开发工具,我会收到 400 错误请求消息,但在 Spring 中,我没有收到来自 Jackson 的错误消息,表明他无法将我的数据解析为 Pojo..

【问题讨论】:

    标签: java json spring jackson pojo


    【解决方案1】:

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

    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){
        ....
    }
    

    【讨论】:

    • 我创建了一个像你这样的类,做了一些修改,但是我的 json 字符串没有被解析,我没有收到错误消息。我怎么能看到杰克逊想要哪种格式?我在第一篇文章中添加了新代码。
    • 好吧,它现在工作了,我只在 getter 上添加了一个 @JsonProperty("DataFormat"),现在它工作了 :) 感谢您的帮助
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      用户对象映射器获取带有对应json字符串的java类对象

      java docs for object mapper

      这里的例子可能对你有帮助 enter link description here

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-02-22
        • 2017-09-06
        • 2017-11-06
        • 1970-01-01
        • 2018-12-11
        • 1970-01-01
        • 2019-08-10
        • 1970-01-01
        相关资源
        最近更新 更多