>source

BeanUtilsBean.populate(object, fieldNameVSfieldValueMap) 를 사용하여 POJO의 필드를 채우려 고합니다.  방법.

내 POJO는 다음과 같습니다 :

class POJO{
  Integer intField;
  Double doubleField
  String str;
}

현재 필드 이름과 필드 값 사이의 맵을 포함하는 HashMap이 있습니다.

이제 다음 코드를 사용하십시오 :

POJO obj = new POJO();
Map<String,String> map = new HashMap<>();
map.put("intField", "1");
map.put("doubleField", "1.1");
BeanUtilsBean.populate(obj, map)


POJO 객체 obj에서 위의 코드를 사용하면 intField 및 doubleField 필드가 각각 예상대로 1과 1.1의 값으로 채워집니다.

이 문제는 str의 해시 맵에 항목이 없으므로 문자열 필드 str에 null이 할당되고 문자열의 기본값은 null입니다. 그러나 맵에 언급되지 않은 사용자 정의 값을 필드로 설정하는 명시적인 방법을 원했습니다. 이 예에서는지도에 str에 대한 항목이 없으므로 str을 "john"으로 설정하고 싶다고 가정하겠습니다. 편집 1 : 또한 필드 유형에 따라 다릅니다. 따라서 POJO에 다른 필드가 있고 문자열 유형 인 경우 맵에 항목이없는 모든 문자열 필드에 대해 John으로 채워 져야합니다.

편집 2 : POJO는 커밋 액세스 권한이없는 다른 프로젝트에 정의되어 있으므로 POJO 자체에서 기본값을 설정하는 것은 해결책이 아닙니다.


  • 답변 # 1

    org.apache.commons.beanutils.ConvertUtilsBean 클래스를 사용하여 org.apache.commons.beanutils.BeanUtilsBean 클래스를 사용해보십시오

  • 답변 # 2

    기본적으로 할 수있는 작업 :

    Map<String, String> map = new HashMap<>() {  // new HashMap<String, String> perhaps
        @Override
        public String get(Object key} {
            return super.getOrDefault(key, "john");
        }
    }
    
    

    필드마다 다른 기본값을 원하면 기본값으로 미리 채워진 로컬 맵을 사용하십시오.

    그러면 스스로 수업을 만들어야합니다.

관련 자료

  • 이전 javascript - 반응시에만 하위 구성 요소를 렌더링하는 방법
  • 다음 acumatica - 열린 DataReader 관련 문제