忽略 spring BeanUtils 嵌套字段的属性不起作用

Ash*_*Ash 5 spring-bean

如何将嵌套属性的忽略属性定义为 spring BeanUtils?

BeanUtils.copyProperties(source, target, ignorePropertiesName);
Run Code Online (Sandbox Code Playgroud)

我有嵌套类名称的类 Contact 及其两个属性“firstName”和“lastname”。

我尝试了三种不同的模式来传递嵌套的文件名以忽略列表,但它们都不起作用。

"contact.name.lastName"
"name.lastName"
"lastName"
Run Code Online (Sandbox Code Playgroud)

下面是带有类定义的完整单元测试,我使用的是 java 8 的 spring-beans-4.3.9.RELEASE 版本。

import org.junit.Assert;
import org.junit.Test;
import org.springframework.beans.BeanUtils;

public class NestedCopyPropertiesTest {

// @Test
public void CopyProperties() {
    String firstName = "Andy";
    String lastName = "Murray";
    Contact source = new Contact(new Name(firstName, lastName));
    Contact target = new Contact(new Name(null, null));

    BeanUtils.copyProperties(source, target);

    String targetFirstName = target.getName().getFirstName();
    String targetLastName = target.getName().getLastName();
    log("targetFirstName: " + targetFirstName);
    log("targetLastName: " + targetLastName);

    Assert.assertTrue("Failed to copy nested properties.", firstName.equals(targetFirstName));
    Assert.assertTrue("Failed to copy nested properties.", lastName.equals(targetLastName));
}

@Test
public void CopyPropertiesWithIgnoreProperties() {
    String firstName = "Andy";
    String lastName = "Murray";
    Contact source = new Contact(new Name(firstName, lastName));
    Contact target = new Contact(new Name(null, null));

    // -------------NOT WORKING?
    // BeanUtils.copyProperties(source, target, "contact.name.lastName");
    // -------------NOT WORKING?
    // BeanUtils.copyProperties(source, target, "name.lastName");
    // -------------NOT WORKING?
    BeanUtils.copyProperties(source, target, "lastName");

    String targetFirstName = target.getName().getFirstName();
    String targetLastName = target.getName().getLastName();
    log("targetFirstName: " + targetFirstName);
    log("targetLastName: " + targetLastName);

    Assert.assertTrue("Failed to copy nested properties.", firstName.equals(targetFirstName));
    Assert.assertTrue("Failed to copy nested properties with ignore property.", !lastName.equals(targetLastName));
}

public void log(String string) {
    System.out.println(string);
}

public class Contact {
    private Name name;

    public Contact(Name name) {
        super();
        this.name = name;
    }

    public Name getName() {
        return name;
    }

    public void setName(Name name) {
        this.name = name;
    }
}

public class Name {
    private String firstName;
    private String lastName;

    public Name(String firstName, String lastName) {
        super();
        this.firstName = firstName;
        this.lastName = lastName;
    }

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }
}
Run Code Online (Sandbox Code Playgroud)

}

我查看了 java 文档,它太通用了,它没有提供任何关于如何使用嵌套字段的线索。我想知道 API 编写者在创建它时会考虑添加示例,否则每个人都想知道如何使用它!伤心