반응형
dispatcher-servlet.xml에 추가
1 2 3 4 | <!-- beans 태그 안에 추가--> <mvc:annotation-driven> <bean id="jsonView" class="org.springframework.web.servlet.view.json.MappingJackson2JsonView"/> <mvc:default-servlet-handler/> | cs |
api 호출
1 2 3 4 5 6 7 8 9 10 11 | @ResponseBody @RequestMapping(value="/openApi/apiXmlList", produces="application/xml;charset=utf-8") // json일시 appication/json; public String apiXmlList(@RequestParam(value="resultMsg",defaultValue="NO") String resultMsg, @RequestParam(value="resultCode",defaultValue="1") String resultCode, HttpServletRequset request, HttpServletResponse response) throws Exception{ List<?> xmlList = null; xmlList = apiService.selectTest(); return xmlParserList(xmlList, resultMsg, resultCode); //return jsonParserList(jsonList, resultMsg, resultCode); } |
xml 생성
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 | public String xmlParserList(List<?> xmlList, String apiMsg, String apiCode){ StringWriter sw = new StringWriter(); try{ DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder docBuilder = docFactory.newDocumentBuilder(); Document doc = docBuilder.newDocument(); Element rootElement = doc.createElemnet("response"); doc.appendChild(rootElement); Element header = doc.createElement("header"); rootElement.appendChild(header); Element reCode = doc.createElement("resultCode"); reCode.appendChild(doc.createTextNode(apiCode)); header.appendChild(reCode); Element reMsg = doc.createElement("resultMsg"); reMsg.appendChild(doc.craeteTextNode(apiMsg)); header.appendChild(reMsg); Element body = doc.crateElement("body"); rootElement.appendChild(body); //item start if(xmlList != null && xmlList.size() > 0){ Element items = doc.createElement("items"); body.appendChild(items); for(Object obj:xmlList){ EgovMap egovMap = (EgovMap)obj; Element item = doc.crateElement("item"); items.appendChild(item); Element data = null; for(Iterator iterator = egovMap.keySet().iterator(); iterator.hasNext();){ String keyName = (String)iterator.next(); if(egovMap.get(keyName) != null){ data = doc.crateElement(keyName); data.appendChild(doc.crateCDATASection((personInfoReplace(egovMap.get(keyName).toString())))); item.appendChild(data); } } } } TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.new Transformer(); transformer.setOutputProperty(OutputKeys.ENCODING,"UTF-8"); transformer.setOutputProperty(OutputKeys.INDENT,"yes"); DOMSource source = new DOMSource(doc); //StreamResult result = new StreamResult(new FileOutputStream(new File("C:\\aa"))); //파일로 저장 StreamResult result = new StreamResult(sw); transformer.trasform(source,result); }catch(ParserConfigurationException pce){ pce.printStackTrace(); }catch(TransformerException tfe){ tfe.printStackTrace(); } return sw.getBuffer().toString(); } | cs |
json 생성
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 | public String jsonParserList(List<?> jsonList, String resultMsg, String resultCode){ JSONObject jsonObject = new JSONObject(); try{ jsonObject.put("resultCode", resultCode); jsonObject.put("resultMsg", resultMsg); JSONArray jsonArray = new JSONArray(); if(jsonList != null && jsonList.size() > 0){ for(int i=0;i<jsonList.size();i++){ EgovMap jsonInfo = (EgovMap)jsonList.get(i); JSONObject jsonData = new JSONObject(); for(Iterator iterator = jsonInfo.keySet().iterator();iterator.hasNext();){ String keyName = (String)iterator.next(); if(jsonInfo.get(keyName) != null){ jsonData.put(keyName, personInfoReplace(jsonInfo.get(keyName).toString())); } } jsonArray.put(jsonData); jsonData = new JSONObject(); jsonObject.put("items",jsonArray); } } }catch(JSONException e){ e.printStackTrace(); } return jsonObject.toString(); } | cs |
....발행하는 순간......가운데정렬이 되버리네ㅔㅔㅔㅔ...
추가+
xml 생성시 특수문자들때문에 문제가 있다. !@#$%^&*() 이런 키보드에 있는 데이터는 CDATA로 감싸주면 사용가능하지만
한글자음을 누르고 나오는 특수문자들
예를들어 └, ♂, ♀ 등
이런문자들이 입력되면 CDATA로 감싸도 XML 생성에 문제가 된다. Exception이 떨어지진 않지만 XML형식이 모두 깨진다.
하지만 JSON으로 만들면 u0009 이런식으로 나온다. 이런 유니코드들을 치환해주는 정규식을 만들어 제거해주면 된다.
[^\u0009\r\n\u0020-\uD7FF\uE000-\uFFFD\ud800\udc00-\udbff\udfff]
xml생성시 xml버전에 따라 다르다는 정보도 있으니 위에 내용으로 안될시 버전에 확인 후 정규식을 바꿔봐야 한다.
반응형
'Start' 카테고리의 다른 글
안드로이드 하이브리드앱 웹뷰 swipe 사용중 오류 해결 (0) | 2023.01.11 |
---|---|
java 페이징 (0) | 2018.12.24 |
[리눅스 서버]Apache web, Tomcat was (0) | 2018.12.12 |
xlsx 다운로드 (0) | 2018.12.12 |
Java 정규표현식 사용법 개인정보처리 (1) | 2018.11.28 |