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

标签 java json spring jackson pojo

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

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

我使用 Spring MVC 和 Jackson Parser..

Java Pojo 必须是什么样子才能自动将此 Json 字符串解析为对象?

在 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;
    }
}

在 Spring :

@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 Bad Request Message,但在 Spring 中,我没有收到来自 Jackson 的错误消息,他无法将我的数据解析为 Pojo..

最佳答案

您将需要一个像这样的对象:

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;
    }
}

Controller 中的方法如下所示:

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

关于java - 使用 Spring 和 Jackson 将 Json 数组解析为 Pojo?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22993174/

相关文章:

java - 如何解决 "Handling error: InvalidGrantException, Bad credentials"

java - 基于 Spring mvc 注解的 Controller RequestMappingHandlerMapping 有什么问题?

java - 从 Activity 中调用自定义片段

Java:替换字符串(用括号!)

javascript - 在 chrome 扩展上全局存储文本,并在加载时重用它

javascript - 带下划线的排序和重组 json 对象

java - Spring 框架无法解析 IntelliJ 中的引用

java - 在2个服务器之间传输InputStream

java - 您使用什么来验证 XML 模式?

java - 如何结合 Jersey、JSON 和 Spring