BeanUtils.copy Properties 속성 을 복사 할 때 빈 값 을 무시 합 니 다.

BeanUtils.copy Properties 빈 값 무시
spring 을 사용 하여 개발 한 사람 은 이 코드 가 낯 설 지 않 을 것 입 니 다.DTO,VO,PO 간 의 복사 에 자주 사 용 됩 니 다.

/**
*    copy  
* 
**/
BeanUtils.copyProperties(Object source, Object target)
그러나 이 줄 코드 는 모든 속성 을 copy 로 합 니 다.어떤 때 는 개별 속성 을 복사 하지 않 으 려 고 합 니 다(예 를 들 어 null 값 속성).이 때 는 다른 방법 이 필요 합 니 다.

/**
*       copy  
* 
**/
BeanUtils.copyProperties(Object source, Object target, String... ignoreProperties)
세 번 째 매개 변 수 는 가 변 길이 형식 입 니 다.동적 으로 무시 하 는 속성 을 가 져 옵 니 다.

/**
 *          
 * 
 * @param source
 * @return
 */
public static String[] getNullPropertyNames (Object source) {
    final BeanWrapper src = new BeanWrapperImpl(source);
    PropertyDescriptor[] pds = src.getPropertyDescriptors();
 
    Set<String> emptyNames = new HashSet<>();
    for(PropertyDescriptor pd : pds) {
        Object srcValue = src.getPropertyValue(pd.getName());
        //            
        if (srcValue == null) {
            emptyNames.add(pd.getName());
        }
    }
    String[] result = new String[emptyNames.size()];
    return emptyNames.toArray(result);
}
확장:
맵 과 Bean 사 이 를 바 꾸 고 두 가지 방식 을 제공 해 야 할 때 가 많 습 니 다.
1.fastjson 사용
1.맵 전환 bean:

Map paramMap = new HashMap();
String jsonStr = JSONObject.toJSONString(paramMap);
Object infoDo = JSON.parseObject(jsonStr, Object.class);
2,bean 맵 전환:
Map map = JSON.parseObject(JSON.toJSONString(object),new TypeReference>(){});
2.comons-beanutils 사용
의존 패키지:

<dependency>
 <groupId>commons-beanutils</groupId>
 <artifactId>commons-beanutils</artifactId>
 <version>1.8.3</version>
</dependency>
그리고 호출 방법:

/**
 * Bean map
 * 
 * @param bean
 * @return
 */
public Map describe(Object bean);
 
/**
 * map bean
 * 
 * @param bean
 * @param map
 */
public void populate (Object bean, Map map);
동시에 지정 한 속성 목록 copy 대상 을 누 를 수 있 습 니 다:

/**
 *             
 *
 * @param source
 * @param target
 * @param properties
 *
 */
public static void copyWithProperties(Object source, Object target, List<String> properties) throws IllegalAccessException, NoSuchMethodException, InvocationTargetException {
    for (String property : properties) {
        PropertyUtils.setProperty(target, property, PropertyUtils.getProperty(source, property));
    }
}
BeanUtils 는 클래스 를 복사 할 때 값 이 비어 있 는 경우 에 주의해 야 합 니 다.

BeanUtils.copyProperties(dest, orig);
이 곳 은 org.apache.comons.beanutils.BeanUtils 를 참조 합 니 다.

ConvertUtils.register(new DateConverter(null), java.util.Date.class);
이 줄 코드 를 추가 하면 date 형식 이 빈 보고서 오류 로 해 결 됩 니 다.

ConvertUtils.register(new IntegerConverter(null), Integer.class);
이 줄 은 integer 값 이 비어 있 을 때 자동 으로 0 으로 할당 되 지 않 는 것 을 해결 할 수 있 습 니 다.
그리고 더 블 도 특별 할 수 있 습 니 다.저 는 연구 하지 않 았 습 니 다.
이러한 추가 조건 은 BeanUtils.copy Properties 앞 에 두 어야 합 니 다.
이상 은 개인 적 인 경험 이 므 로 여러분 에 게 참고 가 되 기 를 바 랍 니 다.여러분 들 도 저 희 를 많이 응원 해 주시 기 바 랍 니 다.

좋은 웹페이지 즐겨찾기