본문 바로가기

Programming

Json 타입별 간편 Convert(ObjectMapper)

 Restful API를 사용하여 Request, Response를 보내고 받다보면, 각 API에서 사용하는 파라메터의 타입별로 변환해줘야하는데,,

 

 회사에서 쓰는 Util을 분석하다보니, 결국 사용하는 변환 방식은 동일한 것임을 발견했다.

 

 방법은 어렵지 않더라,

 

 Request Parameter => Json Message

 

// Request Param Data
Map<String, Object> paramMap = new HashMap<>();

// JSON 파싱 (Java 용 JSON 라이브러리(Jackson)
ObjectMapper om = new ObjectMapper();

// 어떤 타입을 넣던지, 자동으로 변환.
// Map이 아니라 List, List<Map<>>, Map<String, List<String>> 도 마찬가지로 잘 처리한다.
om.writeValueAsBytes(paramMap)

// Http header 세팅
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);

// Http header & body 관련 정보 저장
HttpEntity<byte[]> request = new HttpEntity<byte[]>(om.writeValueAsBytes(paramMap), headers);

 위 소스처럼, ObjectMapper(com.fasterxml.jackson.databind)를 이용하면 쉽게 변환하여 보낼 수 있었다.

 

 반대로, Response도 아래와 같이 처리했다.

JsonNode node = mapper.readValue(jsonStr, JsonNode.class);
List<Map<String, String>> message = mapper.convertValue(node.findPath("result"), new TypeReference<List<Map<String, String>>>() {});

 Response의 타입이 Map<String, List<Map<String, String>>> 로 복잡하게 오는 것을 처리한 예제이다.

 이해하기 쉽게 실 Json Data를 첨부하자면,

 

{

    "result" : [
        {
            "RTNMSG":"정상적으로 처리되었습니다.",
            "RTNCD":"0",
            "P_CHECK":"N"
        }
    ]
}

이렇게 전달받았기 때문에 위 소스처럼 타입을 지정하였다.

 

간단하게 테스트할 소스를 구글링하다, 참고할만한 글이 없어 직접 작성한다...