[SPRING] BeanUtils.copyProperties를 사용하여 특정 필드를 복사 하시겠습니까?
SPRINGBeanUtils.copyProperties를 사용하여 특정 필드를 복사 하시겠습니까?
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;
}
}
해결법
-
==============================
1.BeanWrapper 기술을 사용할 수 있습니다. 다음은 구현 예입니다.
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를 정말로 사용하고 싶다면 여기 해결책이 있습니다. 논리를 뒤집고 전체 속성 목록을 includes와 비교하여 제외 항목을 수집합니다.
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); }
-
==============================
2.Commons BeanUtils를 사용하지 않으려면 BeanWrapper를 사용하여 Spring을 계속 사용할 수 있습니다.
Commons BeanUtils를 사용하지 않으려면 BeanWrapper를 사용하여 Spring을 계속 사용할 수 있습니다.
모든 속성을 수동으로 반복해야하므로 정적 도우미 메서드를 만들려고합니다.
당신은 언제나 copyProperties가하고있는 일을 복사해서 원하는대로 조정할 수 있습니다 : http://tinyurl.com/BeanUtils-copyProperties
-
==============================
3.이것을 확인하십시오 : BeanPropertyCopyUtil.
이것을 확인하십시오 : BeanPropertyCopyUtil.
예:
copyProperties(user, systemUser, "first firstName", "last lastName");
또한 Apache Commons BeanUtils가 필요합니다.
-
==============================
4.다음은 Spring BeanUtils 클래스의 예제입니다.
다음은 Spring BeanUtils 클래스의 예제입니다.
public static void copyList(List sourceList, List targetList, Class targetType) { try { for (Object source : sourceList) { Object target = null; target = targetType.newInstance(); BeanUtils.copyProperties(source, target); targetList.add(target); } } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } }
-
==============================
5.너는 사용할 수있다. org.springframework.beans.BeanUtils.copyProperties (Object source, Object target, Class editable)는 BeansException를 슬로우합니다.
너는 사용할 수있다. org.springframework.beans.BeanUtils.copyProperties (Object source, Object target, Class editable)는 BeansException를 슬로우합니다.
타겟이 복사 할 속성을 정의하는 편집 가능한 인터페이스를 구현하는지 확인합니다.
from https://stackoverflow.com/questions/5079458/copy-specific-fields-by-using-beanutils-copyproperties by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring-Security의 기본 AuthenticationManager는 무엇입니까? 인증 방법은 무엇입니까? (0) | 2019.01.25 |
---|---|
[SPRING] 스프링 보안으로 로그인 한 사용자에게 조건 적으로 JSP 컨텐츠를 표시하는 방법 (0) | 2019.01.25 |
[SPRING] Spring을 통해 스크립트를 사용하여 메모리 내 HSQLDB를 초기화하는 방법 (0) | 2019.01.25 |
[SPRING] MongoDB와 최대 절전 모드 (0) | 2019.01.25 |
[SPRING] Java EE에서 CDI를 사용해야하는 이유 (0) | 2019.01.25 |