- heaer, resultList 와 맵핑될 Bean Class가 업무별로 달라지므로 우선 HashMap에 담고, getter 에서 특정 Bean으로 컨버팅해준다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 | import java.util.ArrayList; import java.util.List; import java.util.Map; import org.apache.commons.beanutils.BeanUtils; /** * DB 아니고 외부 인터페이스에서 받아온 정보 * @auther ddakker 2013. 6. 12. */ public class ExternalBean { private String resultCode; private String errMsg; private Map header; private List<Map> resultList; public String getResultCode() { return resultCode; } public void setResultCode(String resultCode) { this .resultCode = resultCode; } public String getErrMsg() { return errMsg; } public void setErrMsg(String errMsg) { this .errMsg = errMsg; } public Map getHeader() { return header; } public void setHeader(Map header) { this .header = header; } public List<Map> getResultList() { return resultList; } public void setResultList(List<Map> resultList) { this .resultList = resultList; } /** * 헤더 정보를 특정 Bean에 담아 리턴한다. * @param clz * @return * @auther ddakker 2013. 6. 14. */ public <T> T getHeader(Class<T> clz) { Object objBean = null ; try { objBean = clz.newInstance(); BeanUtils.copyProperties(objBean, header); return (T) objBean; } catch (Exception e){ throw ExceptionManager.createException( "JSON 데이터를 Bean으로 맵핑[Header]하는 도중 에러가 발생하였습니다." + e); } } /** * 배열 정보를 특정 List<Bean>에 담아 리턴한다. * @param clz * @return * @auther ddakker 2013. 6. 14. */ public <T> List<T> getResultList(Class<T> clz) { List<T> list = new ArrayList<T>(); try { Object objBean; for ( Map map : resultList ){ objBean = clz.newInstance(); BeanUtils.copyProperties(objBean, map); list.add((T) objBean); } } catch (Exception e){ throw ExceptionManager.createException( "JSON 데이터를 Bean으로 맵핑[ResultList]하는 도중 에러가 발생하였습니다." + e); } return list; } } |
- 각 업무에 맞는 Bean을 생성한다.
1 2 3 4 5 6 7 8 9 10 11 | public class UserHeaderBean { private String userNm; public String getUserNm() { return userNm; } public void setUserNm(String userNm) { this .userNm = userNm; } } |
- 각 업무에 맞는 Bean을 생성한다.
1 2 3 4 5 6 7 | public class ListBean { private String dlvrAddr1; public String getDlvrAddr1() { return dlvrAddr1; } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | import java.util.HashMap; import java.util.List; import java.util.Map; import net.sf.json.JSONObject; public class TestCase { @Test public void jsonTestCase() { String jsonStr = "{'resultCode':'success', 'errorMsg': '','header':{'userNm':'ddakker'},'resultList':[{'dlvrAddr1': '서울~'},{'dlvrAddr1': '충남~'}]}" ; Map classMap = new HashMap(); classMap.put( "header" , HashMap. class ); classMap.put( "resultList" , HashMap. class ); JSONObject json = JSONObject.fromObject(jsonStr); ExternalBean exBean = (ExternalBean) JSONObject.toBean(json, ExternalBean. class , classMap); if ( exBean.getResultCode().equals( "success" ) ){ UserHeaderBean hBean = exBean.getHeader(UserHeaderBean. class ); System.out.println(hBean.geUserNm()); List<ListBean> lBeanList = exBean.getResultList(ListBean. class ); System.out.println(lBeanList.size()); System.out.println(lBeanList.get( 0 ).getDlvrAddr1()); } } } |
- json-lib-2.4-jdk15.jar
- ezmorph-1.0.6.jar
- commons-lang-2.6.jar
- commons-logging-1.1.3.jar
- commons-collections-3.2.1.jar
- commons-beanutils-1.8.3.jar