如何将嵌套属性的忽略属性定义为 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 编写者在创建它时会考虑添加示例,否则每个人都想知道如何使用它!伤心
| 归档时间: |
|
| 查看次数: |
890 次 |
| 最近记录: |