Hello World?

Controller에서 Service 호출하여 JSON 정보 조회 본문

JAVA WEB/SPRING

Controller에서 Service 호출하여 JSON 정보 조회

쮠이 2018. 8. 9. 11:13

웹에서 다른 서비스 조회시,  웹페이지에서 ajax로 호출하여 서비스를 하려 하였으나, 

Access-Control-Allow-Origin  문제로 인해 자바단에서 호출하도록 변경 하였다

 

pom.xml에 아래의 라이브러리들을 maven repository에서 검색하여,  dependency 한다

 

httpClient

httpCore

 

 

그리고 컨트롤러에 아래와 같이 추가한다

 

@RequestMapping(value = "api/test.do") 	
@ResponseBody 	
public void getTicketInfo(HttpServletRequest request, HttpServletResponse response, ModelMap model) throws Exception { 		
	String rtnData = ""; 		
	String USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko"; 		
    Properties proPath = null; 		
    String  serviceURL = "[호출할 URL 정보]";  		
    
    try { 			
    	Map<String, Object> map_d = new HashMap<String, Object>(); 			 			
        HttpGet req = new HttpGet(serviceURL ); 			
        req.setHeader("User-Agent", USER_AGENT); 			
        req.setHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"); 			
        req.setHeader("Accept-Language", "ko-KR,ko;q=0.5");  			
        HttpClient client = HttpClientBuilder.create().build(); 			
        HttpResponse rep = client.execute(req); 			
        int responseCode = rep.getStatusLine().getStatusCode();  			
        BufferedReader rd = new BufferedReader(new InputStreamReader(rep.getEntity().getContent(), "UTF-8")); 			
        StringBuffer result = new StringBuffer(); 			
        String line = ""; 			
        
        while ((line = rd.readLine()) != null) { 				
        	result.append(line); 			
         } 			
         map_d.put("responseCode", responseCode); 			 			
         if ( result.length() > 0 ) { 				
         	JSONParser parser = new JSONParser();  				
         	JSONObject json = (JSONObject) parser.parse(result.toString()); 				
         	
            if ( json != null ) { 					
            	map_d.put("message", json.get("message")); 					
                map_d.put("success", json.get("success")); 				
            } 
         }
         ObjectMapper om = new ObjectMapper(); 			
         rtnData = om.writeValueAsString(map_d);  	
     } catch(Exception e){ 			
     	LOG.error(e.getMessage());  			
        System.out.println(this.getClass().toString() + " Exception : " + e.toString()); 			
        
        Map<String, Object> map_d = new HashMap<String, Object>(); 			
        map_d.put("message", "Error : " + e.toString()); 			
        map_d.put("responseCode", "000");  			
        ObjectMapper om = new ObjectMapper(); 			
        rtnData = om.writeValueAsString(map_d); 		
     } 
     response.setContentType("text/html; charset=utf-8"); 		
     PrintWriter pw = response.getWriter(); 		
     pw.print(rtnData); 		
     pw.flush();     	
}

 

 

위와 같이 컨트롤러를 작성하면, 

웹페이지 자바스크립트에서 api/test.do 를 호출하면 된다

 

웹페이지에서 JSON으로 받도록 했을시엔,  서비스 받은 내용을 더 간단히 줄일수 있다.

이 내용은 차후에 기술토록 하겠다