Spring BeanUtils 在拷贝对象前应注意什么

对象字段要一致

输入

public class BeanUtilsTest {
    public static void main(String[] args) {
        User user = new User();
        user.setIsMarried_(true);
        user.setAge_(11);
        user.setName_("玛丽");
        System.out.println("user: " + user);
        Person person = new Person();
        BeanUtils.copyProperties(user, person);
        System.out.println("person: " + person);
    }
}

@Getter
@Setter
@ToString
class User {
    String name_;
    Integer age_;
    Boolean isMarried_;
}

@Setter
@Getter
@ToString
class Person {
    String name;
    Integer age;
    Boolean isMarried;
    Boolean isMale;
}

输出

user: User(name_=玛丽, age_=11, isMarried_=true)
person: Person(name=null, age=null, isMarried=null, isMale=null)

对象类型要一致

输入

public class BeanUtilsTest {
    public static void main(String[] args) {
        User user = new User();
        user.setIsMarried(true);
        user.setAge(11);
        user.setName("玛丽");
        System.out.println("user: " + user);
        Person person = new Person();
        BeanUtils.copyProperties(user, person);
        System.out.println("person: " + person);
    }
}

@Getter
@Setter
@ToString
class User {
    String name;
    Integer age;
    Boolean isMarried;
}

@Setter
@Getter
@ToString
class Person {
    String name;
    short age;
    Boolean isMale;
    String isMarried;
}

输出

user: User(name=玛丽, age=11, isMarried=true)
person: Person(name=玛丽, age=0, isMale=null, isMarried=null)

不拷贝复杂类型

输入

public class BeanUtilsTest {
    public static void main(String[] args) {
        User user = new User();
        user.setIsMarried(true);
        user.setAge(11);
        user.setName(new ArrayList<>(List.of("玛丽", "莉莉", "丽丽")));
        System.out.println("user: " + user);
        Person person = new Person();
        // 进行浅拷贝
        BeanUtils.copyProperties(user, person);
        System.out.println("person: " + person);
        List<String> name = person.getName();
        name.add("1");
        System.out.println("user: " + user);
        System.out.println("person: " + person);
    }
}

@Getter
@Setter
@ToString
class User {
    List<String> name;
    Integer age;
    Boolean isMarried;
}

@Setter
@Getter
@ToString
class Person {
    List<String> name;
    Integer age;
    Boolean isMarried;
    Boolean isMale;
}

输出

user: User(name=[玛丽, 莉莉, 丽丽], age=11, isMarried=true)
person: Person(name=[玛丽, 莉莉, 丽丽], age=11, isMarried=true, isMale=null)
user: User(name=[玛丽, 莉莉, 丽丽, 1], age=11, isMarried=true)
person: Person(name=[玛丽, 莉莉, 丽丽, 1], age=11, isMarried=true, isMale=null)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值