2017-04-03 60 views
0

我的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 

如何反序列化它?

回答

0

我認爲你應該讓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); 
    } 
}