已解决:java两个不同对象不同属性之间的赋值复制(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){
}
}
赋值的类明细 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 = JSONString(user);
JSONObject jsonObject = JSON.parseObject(jsonStr);
SysUser sysUser = JavaObject(SysUser.class);
System.out.String());
}
}
打断点查看,属性名称不同,值已经全部进去
拓展
fastjson忽略属性
两个属性名称不同类型不同也可以赋值进去
源类 属性
private Integer salary;
赋值类 属性
private String qian;
@JSONField(name=“salary”)
public void setQian(String qian) {
this.qian = qian;
}
如果⽂章帮到了你,⿇烦点个赞和关注吧,或者评论留⾔你的问题

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。