Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 테이블 컬럼 카멜 변환기
- spring-boot
- ㅋㅅㅋ
- 개행문자
- Spring Boot
- enum
- 슬로우 쿼리 설정정보 조회
- 테이블명 조회
- Stream
- dto생성
- DTO
- 개행문자 치환
- 카멜케이스 변환
- groupingby
- STS
- vo생성
- JSTL
- properties editor
- forEach
- 로컬서버 바라보기
- 이넘
- message.properties
- Profile
- 줄바꿈
- Vo
- java
- Type Convert
- 이넘아
- 컬럼명 조회
- 람다식
Archives
- Today
- Total
코더가 되고싶은 남자
JAVA Map > vo convert 해쉬 맵 데이터를 vo객체로 변환 2 본문
반응형
안녕하신가?
자바에서 Map > vo로 컨버트 할 수 있는 코드인데 공통 함수로 쓰기 좋을 것이다.
1. HashMap -> vo 변환
public class CommonUtils {
public static <T> T convertVo(Map<String,Object> map, Class<T> vo) throws Exception {
T obj = null;
if (ObjectUtils.isEmpty(vo)) {
throw new Exception("CommonUtils convertVo : vo Class null");
} else {
//vo 객체 생성
obj = vo.getConstructor().newInstance();
if (MapUtils.isEmpty(map)) {
return obj;
} else {
for (Map.Entry<String, Object> entry : map.entrySet()) {
//vo 필드 id 추출
Field[] field = vo.getDeclaredFields();
for (Field v : field) {
v.setAccessible(true); //필드에 접근하기 위해
if (null != entry.getValue() && entry.getKey().equals(v.getName())) {
try {
Object returnValue = map.get(v.getName());
// log.info("value : " + entry.getValue());
// log.info("type : " + entry.getValue().getClass() + " : " + v.getType());
// log.info("key : " + entry.getKey() + " : " + v.getName());
//Map > vo 형 변환 시 BigDecimal은 동적 변환이 안되서 정적변환 (웬만하면 알아서 파싱 할 것 같은데 파싱하다 에러나면 하나씩 추가해줘야함 ㅠㅠ)
if (!entry.getValue().getClass().equals(v.getType()) && String.valueOf(v.getType()).contains("BigDecimal")) {
returnValue = new BigDecimal(String.valueOf(entry.getValue()));
}
v.set(obj, returnValue); //값이 존재하는 것만 set
} catch (Exception e) {
log.info("CommonUtils convertVo Error : " + e.getMessage());
}
}
}
}
}
}
return obj;
}
}
호출 하는 법
//CommonUtils 클래스 임포트 해주시고 변환할 map객체, vo명칭.class
CommonUtils.convertVo(map, PointSearchVO.class);
위 코드를 사용하면 단 건으로 변환 할 수 있다.
2. List<Map<String, Object>> -> List<vo> 로 변환
public static <T> List<T> convertVoList(List<Map<String, Object>> list, Class<T> type) throws Exception {
if (list == null || list.isEmpty()) {
return Collections.emptyList();
}
List<T> convertList = new ArrayList<>();
list.stream().filter(el -> !ObjectUtils.isEmpty(el))
.forEach(map -> {
try {
convertList.add(convertVo(map, type));
} catch (Exception e) {
log.info("CommonUtils convertVoList Error : " + e.getMessage());
}
});
return convertList;
}
리스트로 컨버트 시키고 싶으면 위 함수만 추가해서 사용하면 된다.
'java' 카테고리의 다른 글
java stream Map convert (0) | 2023.11.07 |
---|---|
java List 데이터 원하는 수 만큼 페이징 함수 처리 하고 싶을 때 subList(), Math.min() (0) | 2022.10.06 |
JAVA Map > vo convert 해쉬 맵 데이터를 vo객체로 변환 1 (0) | 2021.12.24 |
java stream groupingBy() 리스트 데이터를 그룹핑하여 재가공 (0) | 2021.01.18 |
Spring-Boot java Enum 사용법 (0) | 2021.01.15 |