前言
项目开发中 有时会有需要两个不同对象赋值,两个对象的属性名称也不一样,传统的
BeanUtils.copyProperties();这个方法已经不满足需求了, 目前用fastjson处理。
思路
A对象先转成json, 然后json在转成B对象时,通过**@JSONField(name="")** 注解,实现属性名称不一样的赋值
前置准备
内容解释
User里面包含一个list UserCourse ;
SysUser里面包含一个list SysUserCourse;
要把User的所有值赋值给SysUser;
建4个类
源类 User
@Data
public class User {
private String name;
private String sex;
private String age;
private String address;
private String note_seq;
private List<UserCourse> userCourses;
public User( ) {
}
public User(String name, String sex, String age, String address) {
this.name = name;
this.sex = sex;
this.age = age;
this.address = address;
}
}
源类明细 UserCourse
@Data
public class UserCourse {
private String coursename;
private String id;
private String score;
private Integer duration;
}
赋值的类 SysUser
@Data
public class SysUser {
private String username;
private String gender;
private String age;
private String address;
private List<SysUserCourse> sysUserCourses;
@JSONField(name="userCourses")
public void setSysUserCourses(List<SysUserCourse> sysUserCourses) {
this.sysUserCourses = sysUserCourses;
}
@JSONField(name="name")
public void setUsername(String username) {
this.username = username;
}
@JSONField(name="sex")
public void setGender(String gender) {
this.gender = gender;
}
}
赋值的类 明细 SysUserCourse
@Data
public class SysUserCourse {
private String id;
private String coursename;
private String fenshu;
private Integer shijian;
@JSONField(name="score")
public void setFenshu(String fenshu) {
this.fenshu = fenshu;
}
@JSONField(name="duration")
public void setShijian(Integer shijian) {
this.shijian = shijian;
}
}
测试
切记
用的是阿里巴巴的fastjson包 千万别用成 hutool包
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
测试类
public class DemoAcopyBLIst {
public static void main(String[] args) {
User user=new User();
user.setName("测试名称");
user.setAge("18");
user.setSex("男");
user.setAddress("北京市海淀区北坞嘉园");
List<UserCourse> list=new ArrayList<>();
UserCourse userCourse=new UserCourse();
userCourse.setCoursename("数学");
userCourse.setDuration(45);
userCourse.setId("10001");
userCourse.setScore("88分");
UserCourse userCourse2=new UserCourse();
userCourse2.setCoursename("语文");
userCourse2.setDuration(30);
userCourse2.setId("10002");
userCourse2.setScore("99分");
list.add(userCourse);list.add(userCourse2);
user.setUserCourses(list);
String jsonStr = JSON.toJSONString(user);
JSONObject jsonObject = JSON.parseObject(jsonStr);
SysUser sysUser = jsonObject.toJavaObject(SysUser.class);
System.out.println(sysUser.toString());
}
}
打断点查看 , 属性名称不同,值已经全部进去
拓展
两个属性名称不同类型不同也可以赋值进去
源类 属性
private Integer salary;
赋值类 属性
private String qian;
@JSONField(name=“salary”)
public void setQian(String qian) {
this.qian = qian;
}