티스토리 뷰

트러블슈팅

JSONObject 순서 문제

인삼추출물 2020. 4. 10. 15:02

Controller.java

public JSONObject getLineUph(@RequestBody Map<String, Object> param) {
    String data = cm.transVOtoString(param);
    ArrayList<DashVO> arrUPH = service.getLineUPH(data, "LINE_UPH");

    JSONObject jsonObj = new JSONObject();
    for(DashVO uph : arrUPH){
    	jsonObj.put(uph.getPROD_LINE(), uph.getPROD_UPH());
    }

    return jsonObj;
}

결과

발생원인 : JSONObject는 순서상관없이 할당된 메모리에 Data를 넣습니다. 그래서 DB에서 order by로 정렬하여 넣든 코드내에서 다른 방식으로 정렬해서 넣든 JSONObject로 할당되면 순서가 엉망이 되는 것이죠.  

해결방법 :

gson을 이용합니다. 위키에선 'Gson은 JSON의 자바 오브젝트의 직렬화, 역직렬화를 해주는 오픈 소스 자바 라이브러리이다.' 라 설명하고 있습니다. 말그대로 Sorting(정렬)을 해준다 이해하시면 되겠습니다.

② Data를 넘길때 JSONObject가 아닌 SortedMap을 넘기는 겁니다. 일전에 설명했다시피 json역시 map입니다. 따라서 json이 아닌 map으로 넘겨도 지장없이 바인딩 됩니다.

2번 방식 Controller.java

public SortedMap<String, Object> getLineUph(@RequestBody Map<String, Object> param) {
    String data = cm.transVOtoString(param);
    ArrayList<DashVO> arrUPH = service.getLineUPH(data, "LINE_UPH");

    SortedMap<String, Object> elements = new TreeMap<String, Object>();
    for(DashVO uph : arrUPH){
    	elements.put(uph.getPROD_LINE(), uph.getPROD_UPH());
    }

    return elements;
}

결과

댓글
공지사항