如何使用杰克逊反序列化java中的列表?

问题描述:

我的Java类如何使用杰克逊反序列化java中的列表?

public class User { 

    private List<UserInfo> userInfoList; 

    public class UserInfo { 
     private String id; 

    } 
} 

假设它具有的getter,setter方法。

JSON是

{"userInfoList" : [{"id":"a", "id":"b"}]} 

我试图反序列化像下面。

objectMapper.readValue(json, User.class); 

但它会引发错误。

Can not construct instance of User$UserInfoList: no suitable constructor found 

如何反序列化它?

我认为你应该让UserInfo成为静态的。杰克逊不能构建UserInfo类。

我试图与该改变和它的作品对我来说:

public class User { 

    private List<UserInfo> userInfoList; 

    public static class UserInfo { 
     private String id; 

     public UserInfo() { 
      super(); 
     } 

     public String getId() { 
      return id; 
     } 

     public void setId(String id) { 
      this.id = id; 
     } 
    } 

    public List<UserInfo> getUserInfoList() { 
     return userInfoList; 
    } 

    public void setUserInfoList(List<UserInfo> userInfoList) { 
     this.userInfoList = userInfoList; 
    } 
} 

和:

public class App { 
    public static void main(String[] args) throws IOException { 
     ObjectMapper mapper = new ObjectMapper(); 

     User.UserInfo ui1 = new User.UserInfo(); 
     ui1.setId("a"); 

     User.UserInfo ui2 = new User.UserInfo(); 
     ui2.setId("b"); 

     List<User.UserInfo> userInfoList = new ArrayList<User.UserInfo>(); 
     userInfoList.add(ui1); 
     userInfoList.add(ui2); 

     User user = new User(); 
     user.setUserInfoList(userInfoList); 

     System.out.println(mapper.writeValueAsString(user)); 

     user = mapper.readValue(mapper.writeValueAsString(user), User.class); 
    } 
}