difingo에서 api형식으로 받아올때 그대로 입력하고 그대로 받아올수 있게 만듬

 

 

우선 컨트롤러단에서 아래 함수를 만든다.

 

 

 

 

< difingo로 들어가는 로직 INput 후 Jsion으로 return >

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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
 
    // Api 요청시 가져오기 반복적인 부분을 단축시키기 위해 넣음
    // String sRequiredParam = "SHYR,SMST_CD,DERT_MAJR_CD"; // 필수 파라미터 ','값으로 구분/ 빈칸없게
    // ArrayList<DataSet> arrDataSet = 데이터셋으로 전달할 데어터
    private HashMap<Integer, Object> GetRestXupProcess(String domainName, String modelName, String sRequiredParam,
            HttpServletRequest request, HttpServletResponse response,ArrayList<DataSet> arrDataSet) throws Exception {
        // 1 Json 문자열, 2 HttpHeaders 3 HttpStatus
        HashMap<Integer, Object> RestMap = new HashMap<Integer, Object>();
 
        HttpHeaders resHeaders = new HttpHeaders();
        resHeaders.add("Content-Type""application/json;charset=UTF-8");
        RestMap.put(2, resHeaders);
 
        InetAddress inetAddress = InetAddress.getLocalHost();
        // System.out.println("##########################################################");
        // System.out.println("/lms/stdCose.do");
        // System.out.println("parameter == > " +
        // request.getParameter("param").toString());
        // System.out.println("ip == > " + inetAddress.getHostAddress());
        // System.out.println("##########################################################");
 
        HttpPlatformRequest tempRequest = new HttpPlatformRequest(request);
        tempRequest.receiveData();
        PlatformData reqdata = tempRequest.getData();
        
        // 데이터셋 전부 가져오기
        if(arrDataSet!=null)
        {
            for(DataSet data : arrDataSet) {
                reqdata.addDataSet(data);
            }
        }
        
        // 필수 파라미터 ','값으로 구분
        String[] arrRequiredParam = sRequiredParam.split(",");
        ArrayList<String> arrParams = new ArrayList<String>();
        int nIndex = 0// while문에 index를 넣기 위함
        int nRequiredParamCnt = 0// 필수 파라미터 횟수
 
        // 모든 파라미터 XUP Variable에 넣기
        Enumeration params = request.getParameterNames();
        while (params.hasMoreElements()) {
            //String name = (String) params.nextElement();
            arrParams.add((String) params.nextElement());
            
        }
        
        for(String sParam:arrParams) {
            for(String sRParam:arrRequiredParam) {
                if (sRParam.equals(sParam)) {
                    nRequiredParamCnt++;
                }
            }
            reqdata.addVariable(new Variable(sParam, PlatformDataType.STRING, request.getParameter(sParam)));
        }
        
        // 필수 파라미터가 부족하면
        if (nRequiredParamCnt < arrRequiredParam.length) {
            // 400 에러
            // System.out.println("#### 에러");
            RestMap.put(1"Required Error");
            RestMap.put(3, HttpStatus.BAD_REQUEST);
            return RestMap;// new ResponseEntity<String>("Required Error", resHeaders,
                            // HttpStatus.BAD_REQUEST);
        }
        
 
        XIConnector connector = XIConnector.getConnector((HttpServletRequest) request, (HttpServletResponse) response);
        XIServiceRequest serviceRequest = connector.createXIRequest(domainName, modelName, reqdata);
        serviceRequest.setSession(((HttpServletRequest) request).getSession());
        ServiceResponse res = connector.execute(serviceRequest);
        PlatformData data = res.getPlatformData();
 
        JSONObject rootObject = new JSONObject();
        DataSetList dataSetList = data.getDataSetList();
 
        // 레코드셋 → JSON으로 변형
        for (int dataSetIndex = 0; dataSetIndex < dataSetList.size(); dataSetIndex++) {
            DataSet temp = dataSetList.get(dataSetIndex);
 
 
            JSONArray rows = new JSONArray();
 
 
            for (int rowIndex = 0; rowIndex < temp.getRowCount(); rowIndex++) {
                JSONObject tempRow = new JSONObject();
                for (int columnIndex = 0; columnIndex < temp.getColumnCount(); columnIndex++) {
                    tempRow.put(temp.getColumn(columnIndex).getName(), temp.getString(rowIndex, columnIndex));
                }
                rows.add(tempRow);
 
            }
            rootObject.put(temp.getName(), rows);
        }
 
        RestMap.put(1, rootObject.toJSONString());
        RestMap.put(3, HttpStatus.OK);
        return RestMap;
    }
 
cs

 

 

< 위 함수에 데이터셋이 여러개라면 데이터셋을 묶어주는 함수 >

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
 
 
    // 데이터셋 컬럼 및 ROW 추가
    // String DsName -> "dsSearch" xup에 넣을 데이터셋 이름
    // String DsParameter -> "SHYR,SMST_CD,USER_NO" 생성된 데이터셋에 넣을 파라미터
    // int DsRowType -> DataSet.ROW_TYPE_NORMAL, DataSet.ROW_TYPE_INSERTED, DataSet.ROW_TYPE_UPDATED, DataSet.ROW_TYPE_DELETED
    // HttpServletRequest request
        
    private DataSet DataSetProcess(String DsName,String DsParameter,int DsRowType,HttpServletRequest request) {
        DataSet dsSet = new DataSet(DsName);
        
        //System.out.println("AAAA : "+ DsRowType);
        String[] arrRequiredParam = DsParameter.split(",");
        for(String sRequiredParam : arrRequiredParam)
        {
            dsSet.addColumn(sRequiredParam, PlatformDataType.STRING, 255);
            //System.out.println("ADASD : "+sRequiredParam);
        }
        int iRow = dsSet.newRow();
        for(String sRequiredParam : arrRequiredParam)
        {
            dsSet.set(iRow, sRequiredParam, request.getParameter(sRequiredParam));
            //System.out.println("bbbb : "+sRequiredParam);
        }
        dsSet.setRowType(iRow, DsRowType);
        return dsSet;
    }
 
 
 
cs

 

 

 

 

 

< 실제 사용법 예제 1 >

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
        
        //http://localhost:8088/kcu/lms/LRN_LM_01501M01_M01.do?SHYR=2022&SMST_CD=10&USER_NO=22134064&COSE_CD=ES100201&DERT_MAJR_CD=1404150100&SUBJ_CD=ES1002&COPL_SE_CD=1&PNT_SCOR=3&LESS_SHYR=1&ATNLC_APLY_STTS_CD=0&userId=22134064&clientIP=127.0.0.1&programID=LRN_LM_01501M01
        @RequestMapping(value = "/lms/LRN_LM_01501M01_M01.do", method = RequestMethod.POST)
        @ResponseBody
        public ResponseEntity<String> LRN_LM_01501M01_M01(HttpServletRequest request, HttpServletResponse response) throws Exception {
            HashMap<Integer, Object> RestMap = new HashMap<Integer, Object>();
            
            ArrayList<DataSet> arrDataSet = new ArrayList<DataSet>();
            // 데이터셋 작성
            arrDataSet.add(DataSetProcess("dsSearch","USER_NO",DataSet.ROW_TYPE_INSERTED,request));
            arrDataSet.add(DataSetProcess("dsCoplBag","SHYR,SMST_CD,COSE_CD,SUBJ_CD,COPL_SE_CD,PNT_SCOR,LESS_SHYR,DERT_MAJR_CD,ATNLC_APLY_STTS_CD",DataSet.ROW_TYPE_INSERTED,request));
            arrDataSet.add(DataSetProcess("gdsCommonIn1","userId,clientIP,programID",DataSet.ROW_TYPE_INSERTED,request));
            
            
            try {
                // 일반 파라미터 및 데이터셋 xup 실행
                RestMap = GetRestXupProcess("xup_lms""LRN_LM_01501M01_M01",
                        "USER_NO,SHYR,SMST_CD,COSE_CD,DERT_MAJR_CD,SUBJ_CD,COPL_SE_CD,PNT_SCOR,LESS_SHYR,DERT_MAJR_CD,ATNLC_APLY_STTS_CD,userId,clientIP,programID"
                        ,request,response,arrDataSet);
            } catch (Exception e) {
                // TODO: handle exception
                HttpHeaders resHeaders = new HttpHeaders();
                resHeaders.add("Content-Type""application/json;charset=UTF-8");
                return new ResponseEntity<String>(e.toString(), resHeaders, HttpStatus.INTERNAL_SERVER_ERROR);
            }
 
            return new ResponseEntity<String>((String) RestMap.get(1), (HttpHeaders) RestMap.get(2),(HttpStatus) RestMap.get(3));
        }
 
 
cs

 

아래 invoke 사용시 위 함수를 사용하면 그대로 사용할수 있다.

 

 

 

< 실제 사용법 예제 2 >

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
        
        //http://localhost:8088/kcu/lms/LRN_LM_01201M01_S01.do?SHYR=2022&SMST_CD=10&USER_NO=22134064
        @RequestMapping(value = "/lms/LRN_LM_01201M01_S01.do", method = RequestMethod.GET)
        @ResponseBody
        public ResponseEntity<String> LRN_LM_01201M01_S01(HttpServletRequest request, HttpServletResponse response) throws Exception {
            HashMap<Integer, Object> RestMap = new HashMap<Integer, Object>();
            
            ArrayList<DataSet> arrDataSet = new ArrayList<DataSet>();
            // 데이터셋 작성
            arrDataSet.add(DataSetProcess("dsSearch","SHYR,SMST_CD,USER_NO",DataSet.ROW_TYPE_NORMAL,request));
            
            try {
                // 일반 파라미터 및 데이터셋 xup 실행
                RestMap = GetRestXupProcess("xup_lms""LRN_LM_01201M01_S01",
                        "SHYR,SMST_CD,USER_NO"
                        ,request,response,arrDataSet);
            } catch (Exception e) {
                // TODO: handle exception
                HttpHeaders resHeaders = new HttpHeaders();
                resHeaders.add("Content-Type""application/json;charset=UTF-8");
                return new ResponseEntity<String>(e.toString(), resHeaders, HttpStatus.INTERNAL_SERVER_ERROR);
            }
 
            return new ResponseEntity<String>((String) RestMap.get(1), (HttpHeaders) RestMap.get(2),(HttpStatus) RestMap.get(3));
        }
 
 
cs

 

아래 invoke 에서 가져올수 있다.

위 예제 실행시 return 결과