我遇到了解析json数据的问题。我正在使用基于REST api的spring boot构建项目。当我必须解析对应域的数据时,这很容易,我在控制器方法中使用RequestBody和域名,但在当前的场景中,我有一个以json形式的域列表:
{
"data":[
{
"type":"abc",
"subtypes":[
{
"leftValue":"BEACH",
"rightValue":"MOUNTAIN",
"preferencePoint":60
},
{
"leftValue":"ADVENTURE",
"rightValue":"LEISURE",
"preferencePoint":60
}
]
},
{
"type":"mno",
"subtypes":[
{
"leftValue":"LUXURY",
"rightValue":"FUNCTIONAL",
"preferencePoint":60
},
{
"leftValue":"SENSIBLE",
"rightValue":"AGGRESIVE",
"preferencePoint":0
}
]
}
]
}
我在列表中发送数据type
是类Type
的属性
和类类型包含Subtypes
类的列表,子类类包含leftValue
和rightValue
为enums
我正在使用默认使用jackson liberary的spring boot,我想使用Type
将这些数据解析为相应的Jackson
类。任何人都可以为我提供解决方案。
答案 0 :(得分:0)
如果你有静态或动态有效载荷,我不清楚。
静态有效负载
对于静态的,我个人会尝试简化你的有效载荷结构。但是你的结构看起来像这样。 (我跳过了getter和setter。你可以通过Lombok library生成它们。)
public class Subtype{
private String leftValue;
private String rightValue;
private int preferencePoint;
}
public class Type{
private String type;
private List<Subtype> subtypes;
}
public class Data{
private List<Type> data;
}
然后在您的控制器中,您将Data
类型注入@RequestBody
。
动态有效负载
对于动态有效负载,可以选择LinkedHashMap<String, Object>
作为@RequestBody
。该映射中的值的类型为Object
,可以将其转换为另一个LinkedHashMap<String, Object>
,因此该方法也支持嵌套对象。这可以通过这种方式支持无限嵌套。唯一的缺点是您需要根据地图中的键将Object
转换为正确的类型。