트러블슈팅
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;
}
결과