Nested JSON 对象反序列化 inSpring-boot



我在 Spring-boot 中反序列化嵌套 JSON 时遇到了一些问题,该 JSON 作为请求正文提供。

有人可以帮我吗?

下面是 JSON 的结构。

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

我是否需要创建一个零件的 POJO 并将其用作正文中的变量,然后是周 POJO,最后在服务 POJO 中使用周和正文的对象类型?这样行得通吗?

还是有更好的方法?

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

是的,pojo 结构应该如您在问题中所述:

class Service {
private Week week;
private Body body;
//setters,getters and constructors
}

并声明周和正文的 POJO 类及其相应的实例字段。

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

com.fasterxml.jackson.annotation.JsonIgnoreProperties

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

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 结构来反序列化部件,但是如果部件仅包含预定义的键,则可以为其创建一个类。 确保为每个字段创建了二传手和吸盘

好的,所以我找到了解决方案。 让我解释一下。 正确的方法是拥有一个嵌套的POJO。 零件POJO将有它的领域,头和手。 然后是身体 POJO,它将根据给定的示例 JSON 具有类型零件字段。 现在将有另一个POJO,一周及其领域(周日,周一和周二(。现在将有另一个服务POJO,它将具有周和正文类型字段。

好吧,我是对的,直到这里。

我犯的错误是我忽略了第一个封闭的大括号。 是的,将有另一个POJO(例如根(将具有服务类型的字段。 这是丢失的钥匙。

无论如何,我只是想让你经历这个,以便你了解缺失的部分。

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

这是链接。 http://www.jsonschema2pojo.org/

相关内容

最新更新