내 프로젝트에서 이메일 발송은 kafka pub sub을 통해 발송요청 테이블에 저장하는 방식으로 이루어지고 있다. 각 업무단에서 우리 서비스쪽으로 pub을 해주면 우리 서비스쪽에서 sub을 받아야하는데 이번에 토픽 유형을 변경하면서 내부라이브러리가 mapping을 제공하지 않아 json문자열인 payload를 DTO객체로 변환시키는데 어려움을 겪었다. Gson 라이브러리으로는 이중 객체 Mapping이 되지않더라 ㅠㅠㅠ (하나의 DTO안에 DTO,List<DTO> 변수들이 존재하는 case) ++추가(구글링하니까 맵핑할 수 있긴하다 다음에 적용해 봐야지!!) 처음에 내 생각은 payload를 json으로 변환 후 Map<String,Object>형식으로 받아 각 dto를 강제 형변환을 통해 (ex)sampleDTO testDTO=(sampleDTO) map.get("testDTO")) 변환시키려고 했다. 그러나 계속 값이 제대로 맵핑되지않고 에러가 떨어져서 구글링을 하였더니 다음과 같은 정보를 얻을 수 있었다.
일단 Map<String,Object>인 객체 map를 하나 가지고 있다고 생각하자.
import com.fasterxml.jackson.databind.ObjectMapper
이 라이브러리를 사용하면 Mapping이 상당히 쉬워진다!!!!!!
ObjectMapper mapper = new ObjectMapper();
Map To Dto
Dto result = mapper.convertValue(map.get("result"),Dto.class);
List<Map> to List<Dto>
List<Dto> resultList = mapper.convertValue(map.get("resultList"),Mapper.getTypeFactory().defaultInstanct().constructCollectionType(List.class, Dto.class));
참고로 나의 경우에 map안에 들어있는 "resultList"키의 값인 object가 List<map>이었다.
위의 두개는 내가 개발할때 참고하였던 내용이고
아래 두개는 내가 블로그에서 같이 본내용인데 나중에 쓸일이 있을까 싶어 같이 추가해 둔다.
Json To DTO(Map)
Dto result = mapper.readValue(jsonStrong,Dto.class);
Map<String,Object> result = mapper.readValue(jsonStrong,Map.class);
JsonArray To List<Dto>(List<Map>)
List<Dto> result = mapper.readValue(testString,Mapper.getTypeFactory().defaultInstanct().constructCollectionType(List.class, Dto.class));
List<Map<String,Object>> result = mapper.readValue(testString,Mapper.getTypeFactory().defaultInstanct().constructCollectionType(List.class, Map.class));
++참고
Gson은 자바 객체를 JSON표현으로 변환하는데 사용하거나 JSON 문자열을 동등한 자바 객체로 변환하는데 사용할수 있는 라이브러리이다. 즉 java객체<->Json 라이브러리!!
참고한 블로그
https://sehwan93.github.io/java/2022-01-06-JsonToDtoOrJsonToListDto/
[JAVA] Java Map To Dto / List<Map> To List 또는 Json to Map / JsonArray to List
웹 개발자라면 이제 뗄레야 뗄 수 없는 Json.
sehwan93.github.io
https://onlyfor-me-blog.tistory.com/451
[Android] Gson이란? Gson 사용법
서버에서 API를 통해 JSON 값들을 내려받으면 클라이언트인 안드로이드는 이를 파싱해서 필요한 곳에 알맞게 값들을 넣어주거나 표시해야 한다. 그러나 매번 JSONObject, JSONArray를 일일이 선언해서
onlyfor-me-blog.tistory.com
https://velog.io/@james-chun-dev/Android-Java-Gson-%EC%82%AC%EC%9A%A9%EB%B2%95-%EC%A0%95%EB%A6%AC
[Android Java] Gson 사용법 정리
code
velog.io
'스프링' 카테고리의 다른 글
Apache Tomcat (0) | 2022.07.13 |
---|---|
Transaction(트랜잭션)에 대한 이해 (0) | 2022.07.03 |
스프링, 스프링 부트 접미사 (0) | 2022.04.24 |
Spring Annotation 정리 (0) | 2022.04.16 |
스프링 배치 프로세스 (0) | 2022.04.16 |