새소식

반응형
250x250
My Study/Java

Map을 DTO or VO로 매핑

  • -
728x90
반응형

Map 객체를 DTO 객체로 매핑하는 작업을 했었다.

 

작업 도중 가끔 오류가 나는 것을 발견하고 해결한 뒤에 정리 겸 적어본다.

 

일단 Map객체를 DTO 객체로 매핑하는 것은 DTO객체의 set 메소드를 사용하는 방법이 있다.

 

하지만 이런 방식을 사용하면 DTO의 필드가 많으면 많을 수록 코드의 길이가 길어지고 

 

가독성 또한 많이 떨어질 것이다.

 

그래서 DTO의 필드를 뽑아낸 뒤에 map이 그 값을 key로 가지고 있을 때 DTO 객체로의 매핑을 하면 된다.

 

아래 예시 코드이다.

 

MemberDTO userVo = new MemberDTO();
			for(Field field : userVo.getClass().getDeclaredFields()) {
				field.setAccessible(true);

				if(userMap.containsKey(field.getName())) {
					try {
						field.set(userVo, userMap.get(field.getName()));
					} catch (IllegalAccessException e) {
						throw new RuntimeException(e);
					}
				}
			}

 

만약 여기서 MemberDTO가 어떤 클래스를 상속받은 클래스라면

 

상위 클래스의 필드도 뽑아와야 한다.

 

MemberDTOextend userVo = new MemberDTOextend();
			for(Field field : getAllField(userVo.getClass())) {
				field.setAccessible(true);
				if(userMap.containsKey(field.getName())) {
					try	{
						field.set(userVo, String.valueOf(userMap.get(field.getName())));
					} catch (IllegalAccessException e) {
                        throw new RuntimeException(e);
                    }
                }
			}
            
public List<Field> getAllField(Class<?> clazz) {
		List<Field> fields = new ArrayList<>();
		while(clazz != null) {
			fields.addAll(Arrays.asList(clazz.getDeclaredFields()));
			clazz = clazz.getSuperclass();
		}
		return fields;
	}
728x90
반응형

'My Study > Java' 카테고리의 다른 글

Google Analytics (GA)  (0) 2024.02.05
GA (Google Analytics)란?  (1) 2024.02.05
탭 기능 만들기  (0) 2024.01.25
Scheduler 만들 수 있는 Quartz 정리  (0) 2024.01.22
Springboot 3.0 이상에서 Spring security 사용  (0) 2024.01.17
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.