gpt4 book ai didi

java - 使用 BeanUtils.copyProperties 复制特定字段?

转载 作者:IT老高 更新时间:2023-10-28 13:43:50 29 4
gpt4 key购买 nike

springframework.beans.BeanUtils 对于复制对象非常有用,我经常使用“ignoreProperties”选项。但是,有时我只想复制特定的对象(基本上,与“忽略属性”相反)。有谁知道我该怎么做?任何帮助将不胜感激。

import org.springframework.beans.BeanUtils;

public class Sample {
public static void main(String[] args) {
DemoADto demoADto = new DemoADto();
demoADto.setName("Name of Demo A");
demoADto.setAddress("Address of Demo A");

DemoBDto demoBDto = new DemoBDto();

// This is "ignoreProperties" option
// But I want to know how I can copy only name field by using BeanUtils or something.
BeanUtils.copyProperties(demoADto, demoBDto, new String[] {"address"});

System.out.println(demoBDto.getName());
System.out.println(demoBDto.getAddress());
}
}

public class DemoADto {
private String name;
private String address;

public String getName() {
return name;
}

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

public String getAddress() {
return address;
}

public void setAddress(String address) {
this.address = address;
}
}

public class DemoBDto {
private String name;
private String address;

public String getName() {
return name;
}

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

public String getAddress() {
return address;
}

public void setAddress(String address) {
this.address = address;
}
}

最佳答案

您可以使用 BeanWrapper技术。这是一个示例实现:

public static void copyProperties(Object src, Object trg, Iterable<String> props) {

BeanWrapper srcWrap = PropertyAccessorFactory.forBeanPropertyAccess(src);
BeanWrapper trgWrap = PropertyAccessorFactory.forBeanPropertyAccess(trg);

props.forEach(p -> trgWrap.setPropertyValue(p, srcWrap.getPropertyValue(p)));

}

或者,如果你真的,真的想要使用 BeanUtils,这里有一个解决方案。反转逻辑,通过将完整属性列表与包含进行比较来收集排除项:

public static void copyProperties2(Object src, Object trg, Set<String> props) {
String[] excludedProperties =
Arrays.stream(BeanUtils.getPropertyDescriptors(src.getClass()))
.map(PropertyDescriptor::getName)
.filter(name -> !props.contains(name))
.toArray(String[]::new);

BeanUtils.copyProperties(src, trg, excludedProperties);
}

关于java - 使用 BeanUtils.copyProperties 复制特定字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5079458/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com