멍청멍청기록

멍청기록] 자바 JSONParser 사용하기

  • -
728x90
반응형
/**
     * @brief 정산 > 사용처리대사 > 엑셀 자료 업로드
     * <pre>POST - /api/v2/calc/crosscheck/channelused/save</pre>
     * 
     * @param request
     * @return
     * @throws IOException
     * @throws ServletException
     */
    @RequestMapping(method = RequestMethod.POST, value="/api/v2/calc/crosscheck/channelused/save", headers={"Accept=application/json,application/xml"}, produces={"application/json","application/xml"})
    public ResponseEntity<ReturnResource> saveCrossCheckChannelUsed(final HttpServletRequest request
            , @RequestBody JSONObject params
            ) throws TcmException, IOException, ServletException{
        logger.debug(markerParam, "/api/v2/calc/crosscheck/channelused/save POST : saveCrossCheckChannelUsed with params[{}]", params.toJSONString());

    	ReturnResource resource = new ReturnResource();

        try{
            final Claims claims = (Claims) request.getAttribute("claims");
            if (!TokenUtils.isSystemAdmin(claims) && !TokenUtils.isCompAgentMaster(claims) && !TokenUtils.isSiteAgent(claims)) {
                resource.setCode("9010");
                resource.setMessage("권한이 없습니다.");

                return new ResponseEntity<ReturnResource>(resource, HttpStatus.OK);
            }
            // {{ 필수 조건
            if (params.get("channel_seq") == null || "".equals(params.get("channel_seq"))) {
                resource.setInit();
                resource.setCode("9090");
                resource.setMessage("필수 입력 값이 없습니다.[channel_seq]");

                return new ResponseEntity<ReturnResource>(resource, HttpStatus.OK);
            }
            else if (params.get("client_comp_seq") == null || "".equals(params.get("client_comp_seq"))) {
                resource.setInit();
                resource.setCode("9090");
                resource.setMessage("필수 입력 값이 없습니다.[client_comp_seq]");

                return new ResponseEntity<ReturnResource>(resource, HttpStatus.OK);
            }
            // }} 필수 조건
            
            String userAuth = claims.get("user_auth").toString();
            logger.info(markerParam, "/api/v2/calc/crosscheck/channelused/save userAuth : {}", userAuth);
    
            params.put("log_ip", LogUtil.getClientIP(request));
            params.put("user_comp_seq", claims.get("comp_seq").toString());
            params.put("user_seq", claims.get("user_seq").toString());
            
        	JSONObject jobject = new JSONObject();
        	JSONParser jparser = new JSONParser();

        	jobject = (JSONObject) jparser.parse(params.toJSONString());
            
            JSONObject result = calculateService.saveCrossCheckChannelUsed(jobject);
            
            if ("0000".equals(result.get("code"))) {
                resource.setCode(result.get("code").toString());
            }
            else {
                resource.setCode(result.get("code").toString());
                resource.setMessage(result.get("message").toString());
            }

            return new ResponseEntity<ReturnResource>(resource, HttpStatus.OK);
        }
        catch(final SignatureException e) {
            resource.setCode("9999");
            resource.setMessage(e.getMessage());
            
            return new ResponseEntity<ReturnResource>(resource, HttpStatus.INTERNAL_SERVER_ERROR);
        }
        catch(final Exception e) {
            resource.setCode("9999");
            resource.setMessage(e.getMessage());
            
            return new ResponseEntity<ReturnResource>(resource, HttpStatus.INTERNAL_SERVER_ERROR);
        }
    }

 

java.util.ArrayList cannot be cast to org.json.simple.JSONArray

 

java admin 프로젝트와 api 프로젝트간에 데이터를 바인딩하는 과정에서 위와 같은 오류가 발생한다.

구글로 찾아보니 JSONParser 를 사용해서 Casting을 하면 된다고 하는데 문제는 이 parser를 어떻게 써야하는지 모르는 상황이고 어디에서 어떻게 변환해줘야하는지 몰라서....헤메고 있었다.

 

해결 방법은 params 를 갖고 오는데 그 params를 JSONObject 로 변환을 해서 그 변환된 값을 변수에 담아 Controle 단에서 service 단으로 넘겨주는 주는 방식으로 사용하면 된다.

 

헝헝 ㅠㅠㅠ 백단은 어렵다.......

 

반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.