如何使用 Jackson 反序列化 java 中的列表?

How to use Jackson to deserialise list in java?

我的JavaClass是

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 设为静态。 Jackson 无法构造 UserInfo class.

我尝试了那个改变,它对我有用:

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);
    }
}