2017-04-03 12 views
0

私のJavaクラスは、のは、それはゲッター、セッターメソッドを持っていると仮定しましょうジャクソンを使用してJavaのリストをデシリアライズする方法は?

public class User { 

    private List<UserInfo> userInfoList; 

    public class UserInfo { 
     private String id; 

    } 
} 

です。

JSONは、私は以下のようにそれをデシリアライズしようとした

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

です。

objectMapper.readValue(json, User.class); 

ただし、エラーが発生します。

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

デシリアライズするにはどうすればよいですか?

答えて

0

私はUserInfoを静的にするべきだと思います。 Jacksonは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); 
    } 
} 
関連する問題