我在 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/