Jackson ObjectMapper 로 가져온 JSON MAP으로 꺼내기
사내 시스템에서 외부 API를 JSON으로 받아오는 부분이 있는데
이 받아온 JSON을 Jackson으로 변환한 후 Map형식으로 변환한 데이터를
화면 프레임워크에 IO로 전달하는 방식으로 구현되어 있었다.
그런데 화면 프레임워크 IO에서 계층 JSON을 변환 지원을 못한다고 한다.
특정 업무에서 계층형 JSON을 전달받는 API가 있는데
계층 안에 들어가있는 값을 화면에서 써야 되서
Jackson에서 JSON 변환한 Map 객체에서
계층으로 들어가 있는 Map 객체를 꺼내고 다시 가공해서 화면으로 보내도록 개발했다.
public class ResponseClass {
private String id;
private Object result;
private Object detail;
pubic void setId(String id) {
this.id= id;
}
public String getId() {
return id;
}
pubic void setResult(Object result) {
this.result = result;
}
public Object getResult() {
return result;
}
pubic void setDetail(Object detail) {
this.detail= detail;
}
public Object getDetail() {
return detail;
}
우선 위와 같이 응답받은 JSON을 변환할 setter/getter class를 만든다.
// 응답받은 JSON
String sJson = "{\"id\":\"aa\", \"result\": {\"code\": \"00\", \"detail\":{\"val\":\"hi~\"}}}";
// readValue로 데이터 클래스에 꺼내오기
ResponseClass oConts = new ObjectMapper().readValue(sJson , ResponseClass);
// MAP으로 변환 된 계층 JSON값 가져오기
Object oDetail = ((Map<String,Object)) oConts.getResult()).get("detail");
// detail 객체 셋팅
oConts.setDetail(oDetail);
JSON 안에 계층으로 들어가있는 JSON은 Map으로 변환되고
그 안에 있는 JSON도 Map으로 변환되는 구조이다.
(Jackson을 처음 수정해봐서 Map으로 변환되는걸 몰라서 삽질 한참 했음ㅠㅠ)
그런데 프레임워크에서 단일 map만 io로 지원을 해줘서
각각 꺼내서 화면으로 넘겨줘야 했다.
그래서 result Map에서 detail 맵을 꺼내서 셋팅 해주었다 !!
'IT > 개발이슈' 카테고리의 다른 글
CLOB 컬럼 VARCHAR2로 분할해서 여러행으로 나눠 조회 가져오기 (CONNECT BY) (0) | 2020.10.01 |
---|---|
ORA-01461 / CLOB 컬럼 4000byte 이상 INSERT UPDATE시 에러 발생 해결 (2) | 2020.10.01 |