728x90
반응형
자바로 post방식 json 타입 파라미터 전송하여 open api 값 가져오기
package egovframework.frmprd.ifh.openapi.web;
import com.nexacro.uiadapter17.spring.core.annotation.ParamDataSet;
import com.nexacro.uiadapter17.spring.core.data.NexacroResult;
import egovframework.com.cmm.util.EgovStringUtil;
import lombok.extern.slf4j.Slf4j;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import net.sf.json.JSONSerializer;
import org.apache.http.HttpException;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.message.BasicHeader;
import org.apache.http.message.BasicNameValuePair;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.*;
@Slf4j
@Controller
public class BusinessmanApiController {
/*
사업자 상태조회
*/
@RequestMapping(value = "/openapi/businessmanApiStatus.do")
public NexacroResult businessmanApiStatus( @ParamDataSet(name = "dsSearch", required = false) Map<String,String> searchInfo) {
NexacroResult result = new NexacroResult();
String responseString="";
List<Map<String,Object>> businessList = new ArrayList<Map<String,Object>>(); //사업자정보
Map<String,Object> businessMap = new HashMap<String,Object>();
try {
responseString = processHTTP(searchInfo);
if(!responseString.equals("")) {
JSONObject jsonObject = JSONObject.fromObject(JSONSerializer.toJSON(responseString));
JSONArray jsonArray = (JSONArray) jsonObject.get("data"); //사업자정보
//사업자정보 map으로 변환
for(int i = 0; i< jsonArray.size(); i++) {
JSONObject tempJson = jsonArray.getJSONObject(i);
//Map Parameter를 추가
if(tempJson != null){
@SuppressWarnings("unchecked")
Iterator<String> keys = tempJson.keySet().iterator(); //사업자정보
while( keys.hasNext() ){
String key = keys.next();
businessMap.put(key, tempJson.get(key));
}
businessList.add(businessMap);
businessMap = new HashMap<String,Object>();
}
}
}
log.debug("businessList:" + businessList);
result.addDataSet("output1", businessList);
} catch (Exception e) {
log.debug("api 사업자 상태조회 Exception : " + e.getMessage());
result.setErrorCode(-1);
result.setErrorMsg(" ");
}
return result;
}
/**
* open api url 호출
* @param
* @return
*/
public String processHTTP(Map<String,String> params ) throws Exception
{
int statusCode = 0;
// String url = "http://api.odcloud.kr/api/nts-businessman/v1/status?serviceKey=발급받은서비스키";
//175.106.80.117,175.106.80.194
String url = "http://175.106.80.117/api/nts-businessman/v1/status?serviceKey=발급받은서비스키";
CloseableHttpClient httpclient = HttpClientBuilder.create().build();
HttpPost httpPost = new HttpPost(url);
String bNo = params.get("bNo");
String json = "{\"b_no\": [\"" +bNo + "\"]}";
try {
StringEntity requestEntity = new StringEntity(json , "utf-8");
httpPost.addHeader("content-type","application/json");
httpPost.addHeader("Accept","application/json");
httpPost.setEntity(requestEntity);
HttpResponse response = httpclient.execute(httpPost);
statusCode = response.getStatusLine().getStatusCode();
if( statusCode == 200){
// 정상인 경우 메시지를 읽어 들여 그 결과를 리턴한다.
BufferedReader rd = new BufferedReader( new InputStreamReader(response.getEntity().getContent()));
StringBuffer result = new StringBuffer();
String line = "";
while ((line = rd.readLine()) != null) {
result.append(line);
}
// log.debug("result.toString(): " + result.toString() );
return result.toString();
}
} catch (Throwable e) {
throw new HttpException((new StringBuilder("오류가 발생하였습니다.")).append(statusCode).toString());
}
if( statusCode != 200)
{
throw new HttpException((new StringBuilder("오류가 발생하였습니다.")).append(statusCode).toString());
}
return "";
}
/*
사업자 진위확인조회
*/
@RequestMapping(value = "/openapi/businessmanApiValidate.do")
public NexacroResult businessmanApiValidate( @ParamDataSet(name = "dsSearch", required = false) Map<String,String> searchInfo) {
NexacroResult result = new NexacroResult();
String responseString="";
List<Map<String,Object>> businessList = new ArrayList<Map<String,Object>>(); //사업자정보
List<Map<String,Object>> requestParamList = new ArrayList<Map<String,Object>>(); //requestParamList
List<Map<String,Object>> statusList = new ArrayList<Map<String,Object>>(); //statusList
Map<String,Object> businessMap = new HashMap<String,Object>();
Map<String,Object> requestParamMap = new HashMap<String,Object>();
Map<String,Object> statusMap = new HashMap<String,Object>();
try {
responseString = processHTTP2(searchInfo);
if(!responseString.equals("")) {
JSONObject jsonObject = JSONObject.fromObject(JSONSerializer.toJSON(responseString));
JSONArray jsonArray = (JSONArray) jsonObject.get("data"); //사업자정보
//사업자정보 map으로 변환
if(jsonArray.size() > 0) {
JSONObject tempJson = jsonArray.getJSONObject(0);
//Map Parameter를 추가
if(tempJson != null){
@SuppressWarnings("unchecked")
Iterator<String> keys = tempJson.keySet().iterator(); //사업자정보
while( keys.hasNext() ){
String key = keys.next();
if(!key.equals("request_param") && !key.equals("status") ) {
businessMap.put(key, tempJson.get(key));
}
}
//request_param
JSONObject requestParam = (JSONObject) tempJson.get("request_param");
if(requestParam != null) {
@SuppressWarnings("unchecked")
Iterator<String> keys2 = requestParam.keySet().iterator();
while (keys2.hasNext()) {
String key = keys2.next();
requestParamMap.put(key, requestParam.get(key));
}
}
//request_param
JSONObject status = (JSONObject) tempJson.get("status");
if(status != null) {
@SuppressWarnings("unchecked")
Iterator<String> keys3 = status.keySet().iterator();
while (keys3.hasNext()) {
String key = keys3.next();
statusMap.put(key, status.get(key));
}
}
}
}
}
businessList.add(businessMap);
requestParamList.add(requestParamMap);
statusList.add(statusMap);
log.debug("businessList:" + businessList);
log.debug("requestParamList:" + requestParamList);
log.debug("statusList:" + statusList);
result.addDataSet("output1", businessList);
result.addDataSet("output2", requestParamList);
result.addDataSet("output3", statusList);
} catch (Exception e) {
log.debug("api 사업자 진위확인 Exception : " + e.getMessage());
result.setErrorCode(-1);
result.setErrorMsg(" ");
}
return result;
}
/**
* open api url 호출
* @param
* @return
*/
public String processHTTP2(Map<String,String> params ) throws Exception
{
int statusCode = 0;
String url = "http://api.odcloud.kr/api/nts-businessman/v1/validate?serviceKey=발급받은서비스키";
CloseableHttpClient httpclient = HttpClientBuilder.create().build();
HttpPost httpPost = new HttpPost(url);
String bNo = EgovStringUtil.nvl(params.get("b_no")); //사업자등록번호(필수)
String pNm = EgovStringUtil.nvl(params.get("p_nm")); //대표자성명(필수)
String startDt = EgovStringUtil.nvl(params.get("start_dt")); //개업일자(필수)
String pNm2 = EgovStringUtil.nvl(params.get("p_nm2")); //대표자성명2
String bNm = EgovStringUtil.nvl(params.get("b_nm")); //상호
String corpNo = EgovStringUtil.nvl(params.get("corp_no")); //법인등록번호
String bSector = EgovStringUtil.nvl(params.get("b_sector")); //주업태명
String bType = EgovStringUtil.nvl(params.get("b_type")); //주종목명
String json = "{\"businesses\": [ { \"b_no\":\"" +bNo + "\","; //사업자등록번호(필수)
json += "\"start_dt\":\"" +startDt + "\","; //개업일자(필수)
json += "\"p_nm\":\"" +pNm + "\","; //대표자성명(필수)
json += "\"p_nm2\":\"" + pNm2 + "\","; //대표자성명2
json += "\"b_nm\":\"" + bNm + "\","; //상호
json += "\"corp_no\":\"" + corpNo + "\","; //법인등록번호
json += "\"b_sector\":\"" + bSector + "\","; //주업태명
json += "\"b_type\":\"" + bType + "\""; //주종목명
json += "}]}";
// log.debug("json" + json);
try {
StringEntity requestEntity = new StringEntity(json , "utf-8");
httpPost.addHeader("content-type","application/json");
httpPost.addHeader("Accept","application/json");
httpPost.setEntity(requestEntity);
HttpResponse response = httpclient.execute(httpPost);
statusCode = response.getStatusLine().getStatusCode();
if( statusCode == 200){
// 정상인 경우 메시지를 읽어 들여 그 결과를 리턴한다.
BufferedReader rd = new BufferedReader( new InputStreamReader(response.getEntity().getContent()));
StringBuffer result = new StringBuffer();
String line = "";
while ((line = rd.readLine()) != null) {
result.append(line);
}
log.debug("result.toString(): " + result.toString() );
return result.toString();
}
} catch (Throwable e) {
throw new HttpException((new StringBuilder("오류가 발생하였습니다.")).append(statusCode).toString());
}
if( statusCode != 200)
{
throw new HttpException((new StringBuilder("오류가 발생하였습니다.")).append(statusCode).toString());
}
return "";
}
}
728x90
반응형
'프로그램 > 자바' 카테고리의 다른 글
전자정부프레임워크 스케줄러 생성 (0) | 2021.12.15 |
---|---|
자바로 크로스 도메인 우회처리 (0) | 2021.12.14 |
자바로 PWA PUSH 만들기 (0) | 2021.08.06 |
기본 Java 타입과 DB 필드 매핑 (0) | 2021.08.04 |
사용자 정의 컬럼 추가하기 (0) | 2021.05.25 |
댓글