在Spring-boot中嵌套JSON对象反序列化

时间:2020-05-23 13:29:47

标签: java spring spring-boot spring-mvc

我在Spring-boot中反序列化作为请求主体的嵌套JSON时遇到了一些问题。

请问有人可以帮我吗?

下面是JSON的结构。

{
  "service": {
    "week": {
      "sunday": "onene",
      "monday": "two",
      "tuesday": "three"
    },
    "body": {
      "parts": {
        "head": "one",
        "hand": "two"
      }
    }
  }
}

是否需要创建零件的POJO并将其用作正文中的变量,然后创建Week POJO,最后在Service POJO中使用week和body的对象类型?那行得通吗?

还是有更好的方法?

很抱歉,我无法在此处发布实际的JSON。因此,我提供了一个示例结构。

4 个答案:

答案 0 :(得分:0)

是的,pojo结构应该与您在问题中所描述的一样:

class Service {

private Week week;
private Body body;

//setters,getters and constructors

}

并声明Week和Body的POJO类以及它们的相应实例字段。

答案 1 :(得分:0)

要反序列化这种结构,您将需要

class Body {
    private Service service;
}

class Service {
    private Week week;
    private Map<String, String> parts;
}

class Week {
    private String sunday;
    private String monday;
    private String tuesday;
    private String wednesday;
    private String thursday;
    private String friday;
    private String saturday;
}

如您所见,我们可以使用Map结构反序列化零件,但是,如果零件仅包含预定义键,则可以为其创建一个类。 确保为每个字段创建了setter和getters

答案 2 :(得分:0)

您需要创建POJO并在POJO的类级别使用@JsonIgnoreProperties(ignoreUnknown = true)。此注释将忽略未知属性。

com.fasterxml.jackson.annotation.JsonIgnoreProperties

答案 3 :(得分:0)

好的,所以我找到了解决方案。 让我解释。 正确的方法是使用嵌套的POJO。 POJO零件将具有其头部和手部的区域。 然后是POJO主体,根据给定的示例JSON,该主体将具有Type Parts字段。 现在将有另一个POJO,周及其字段(周日,周一和周二)。现在将有另一个Service POJO,其中将具有Week和Body类型字段。

好吧,我是正确的,直到这里。

我犯的错误是我忽略了第一个封闭的花括号。 是的,将有另一个POJO(例如Root),其字段类型为Service。 这是丢失的钥匙。

无论如何,我只是希望您仔细阅读一下,以便您了解丢失的部分。

最后,最好的部分是,有一个在线链接,您可以通过该链接从给定的JSON输入中生成具有适当结构的所有POJO。

链接在这里。 http://www.jsonschema2pojo.org/