场景
今天在认真撸代码的时候,碰到了一个问题:需要把对象A中的信息拷贝到对象B中,但是呢A和B中有一个字段的变量名是一样的,字段类型却是不一样的,具体如下:
准备
User01
/**
* @desc: 用户实体类
* @author: shy
* @date: 2020/12/28 12:38
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User01 {
//用户Id
int userId;
//用户姓名
String userName;
//用户工资
Double salary;
}
User02
/**
* @desc:
* @author: shy
* @date: 2021/3/18 13:41
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User02 {
//用户Id
String userId;
//用户姓名
String userName;
//用户工资
Double salary;
}
上面两个实体类中userId的类型是不一样的,一个是int,另外一个是String。
使用BeanUtils.copyProperties()
当使用BeanUtils.copyProperties() 进行转换的时候,发现如果类型不一致的话,会出现转换失败的问题
/**
* @desc:
* @author: shy
* @date: 2021/2/23 17:39
*/
public class Object2Json {
public static void main(String[] args) {
User02 user02 = new User02();
user02.setUserId("1");
user02.setUserName("curry");
user02.setSalary(800d);
User01 user01 = new User01();
BeanUtils.copyProperties(user02, user01);
System.out.println(user02);
System.out.println(user01);
}
}
运行结果:
我们发现userId并没有拷贝成功
使用JSON.parseObject()
使用Json作为中间桥梁来进行转换
/**
* @desc:
* @author: shy
* @date: 2021/2/23 17:39
*/
public class Object2Json {
public static void main(String[] args) {
User02 user02 = new User02();
user02.setUserId("1");
user02.setUserName("curry");
user02.setSalary(800d);
//信息转换
User01 user01 = JSON.parseObject(JSON.toJSONString(user02), User01.class);
System.out.println(user02);
System.out.println(user01);
}
}
运行结果:
此时userId已经转换成功了
总结
到这里我们就可以发现,如果需要进行对象之间的转换且存在字段类型不一致的情况时,可以考虑使用JSON.parseObject() 来完成我们需要做的操作