我在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。因此,我提供了一个示例结构。
答案 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。