将对象转换为java中的自定义DTO列表

时间:2014-03-18 21:57:33

标签: java json casting

以下是代码:

Object obj = getUsers();

List<UserDTO> userDTOList = new ArrayList<UserDTO>();

userDTOList = (ArrayList<UserDTO>)obj;

for (UserDTO userDTO : userDTOList) {

   do some stuff with userDTO   

}

&#34; getUsers()&#34;的签名如下

List<UserDTO> getUsers();

getUsers返回一个用户列表,如果我打印该对象(这里是变量obj),我可以看到它们。

obj实际上是一个json响应,如下所示

  

[{的firstName = A,姓氏= B,EMAILADDRESS = AB @ email.com},{的firstName = C,姓氏= d,EMAILADDRESS = CD @ email.com},{的firstName = E,姓氏= F,EMAILADDRESS =EF@email.com}]

现在我遇到的问题是:

在演员之后,当我在演出的userDTOList上进行迭代时,我看到所有单独的userDTO都携带相同的数据,但实际上它们是不同的,因为我可以在打印对象时确认。这就像第一个用户信息被复制到其他人一样。

与上面的示例一样,3个userDTO应该携带个人用户信息,但我要说三个DTO的firstName = A.

知道如何解决这个问题或者这里出了什么问题?

来自另一个DTO的

getUsers / setUsers

private List<UserDTO> s$user;

public List<UserDTO> getUsers() {
    return s$user;
}

public void sets$user(List<UserDTO> s$user) {
    this.s$user = s$user;
}

UserDTO

    private String s$firstName;
private String s$lastName;
private String s$emailAddress;

和他们的getter / setter

所有DTO都是通过json解析设置的。

1 个答案:

答案 0 :(得分:1)

您是说并非列表中的所有项目都是UserDtos吗?如果是这样,试试:

Object obj = getUsers();
List<Object> userDtoList = (ArrayList<Object>) obj;

for (Object userDtoObject : userDtoList) {
    if (userDtoObject instanceof UserDto) {
        UserDto userDto = (UserDto) userDtoObject;

        // Do stuff with userDto...
    }
}

修改

如果您收到JSON响应,则不应该使用它,您应该使用如下的库: