Java &引用;“没有合适的建造商”;反序列化JSON子级时出错
我正在尝试使用fasterxml/jackson将json结构映射到pojo 我的json来自一个文件,如下所示:Java &引用;“没有合适的建造商”;反序列化JSON子级时出错,java,json,jackson,deserialization,fasterxml,Java,Json,Jackson,Deserialization,Fasterxml,我正在尝试使用fasterxml/jackson将json结构映射到pojo 我的json来自一个文件,如下所示: { "groups": [ { "name": "Group1", "icon": "group1.png", "banner": "banner.png" }, { "name": "Group2", "icon": "group2.png",
{
"groups": [
{
"name": "Group1",
"icon": "group1.png",
"banner": "banner.png"
},
{
"name": "Group2",
"icon": "group2.png",
"banner": "banner.png"
}
],
"ticker": [
{
"title": "ticker1",
"description": "description",
"url": "bla",
"icon": "icon.png",
"banner": "banner.png",
"group": "Group1",
"enabled": "true",
"startTime": "00:00",
"startDate": "15.10.2013"
}
]
}
我对小组感兴趣。因此,我创建了一个类组:
public class Groups implements Serializable {
private final static long serialVersionUID = 42L;
private List<Group> groups;
public Groups() {}
public Groups ( List<Group> groups ) {
this.groups = groups;
}
public List<Group> getGroups() {
if (groups == null) {
groups = new ArrayList<Group>();
}
return groups;
}
public void add(Group group) {
getGroups().add(group);
}
}
公共类组实现可序列化{
私有最终静态长serialVersionUID=42L;
私人名单组;
公共组(){}
公共组(列表组){
这个组=组;
}
公共列表getGroups(){
如果(组==null){
groups=newarraylist();
}
返回组;
}
公共无效添加(组){
getGroups().add(组);
}
}
通常我使用以下代码将json映射到pojo:
public static <T> T readJsonFile(File file, Class<T> valueType) throws IOException {
String json = readJsonFile(file.getAbsolutePath());
if( StringUtils.isEmpty(json) ) {
return null;
}
return createObjectMapper().readValue(json, valueType);
}
publicstatict readJsonFile(文件文件,类valueType)抛出IOException{
字符串json=readJsonFile(file.getAbsolutePath());
if(StringUtils.isEmpty(json)){
返回null;
}
返回createObjectMapper().readValue(json,valueType);
}
如果pojo是外部json对象,那么这种方法可以很好地工作。
但是,如果我试图提取组,它会失败:
“没有合适的构造函数”
如何提取嵌套在json结构中的pojo?public Groups(){
public Groups() {
groups = new ArrayList<>();
}
groups=newarraylist();
}
默认构造函数用于序列化,而组
仅定义为接口
我甚至会更改all,并将字段初始化为非空值。要么手工提取它,然后将其交给解析器,要么创建整个JSON结构的Java表示,然后访问“组”我已经尝试过你的方法,但仍然得到相同的错误。然后它只能是
private List groups=new ArrayList()代码>你的第一个答案毕竟是对的。在我的组类中有一个隐藏的异常。谢谢。