도래울마을
268
2018-05-15 22:02:15
2
801

http client 관련 질문입니다~!


안녕하세요 


먼저 도움주시려 긴 글 읽어주신점 감사드립니다.


현재 http client 를 사용하여


포스트맨에서와 같은 기능을 구현하려 하고있습니다.


기능은

POST 방식으로 request url을 입력(+그에필요한 데이터 json셋팅해서 같이) 보내서 


return 되는 json을 화면에 보여주는 기능입니다.


문제는 정상처리가 될때는 return 되는 json을 잘받아옵니다.


하지만 에러가 났을때의 return되는 json이 null 입니다.


코드는 아래와 같습니다.


이해를 돕기위해 예를들자면.


아래의 No라는 컬럼은 숫자가 들어가야 정상작동합니다.

제가 원하는건 string이 들어가 에러가 날때,

그때 관련된 에러메시지를 받아오고싶습니다.

아래처럼 말이죠..(아래는 포스트맨으로 request하여 얻은 body내용)


많은 조언 부탁드립니다!


{

    "timestamp": 1526386386520,

    "error": "java.lang.NumberFormatException",

    "exception": "NumberFormatException: For input string: \"AAAAA\"",

    "message": "요청 전문을 읽지 못했습니다.",

    "status": 500,

    "arguments": null

}





getUrl = in.getRequestUrl();

String responseMsg = "";

JsonInfoVo out = new JsonInfoVo();

out=null;

try

{

JSONObject jsonObject = null;

JSONObject json = new JSONObject();

         //입력받은 맵 데이터를 json 담기

        

         json.put("No","AAAAA");

         

         String body = json.toString();

         System.out.println(body);

         

         //접속 URL

         URL postUrl = new URL(getUrl);


         //HTTP Connection Start

         HttpURLConnection connection = (HttpURLConnection) postUrl.openConnection();

         connection.setDoOutput(true); // xml내용을 전달하기 위해서 출력 스트림을 사용

         connection.setInstanceFollowRedirects(false); // Redirect처리 하지 않음

         connection.setRequestMethod("POST");

         connection.setRequestProperty("Content-Type", "application/json");

         BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(connection.getOutputStream(), "UTF-8"));

         bw.write(body);

         bw.flush();

         

         BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));

         //HTTP Connection End

         jsonObject = new JSONObject(br.readLine());

         

         System.out.println("return json : "+jsonObject);

         responseMsg = jsonObject.toString();

out.setResponseMsg(responseMsg);

connection.disconnect();

}

catch(Exception e)

{

e.printStackTrace();

}

return out;

}


0
0
  • 답변 2

  • edwin308
    2
    2018-05-15 23:03:16

    힌트 : Exception 중 IOException 을 추가 catch  getErrorStream 으로 데이터가 넘어옵니다.

    or 

    Example 

    InputStream is;
        if (connection.getResponseCode() >= 400) {
          // error!
          is = connection.getErrorStream();
        } else {
          is = connection.getInputStream();
        }

    자세한것 검색하여 보세요 getErrorStream 용법
    0
  • 도래울마을
    268
    2018-05-16 09:37:19

    edwin308


    감사합니다.


    사실 connection.getErrorStream() 를 찍어서 확인했을때는 계속 

    sun.net.www.protocol.http.HttpURLConnection$HttpInputStream@44d87ff3


    이런값이나와서 뭐지...아닌가 했었는데


    br = new BufferedReader(new InputStreamReader(connection.getErrorStream(), "UTF-8"));


    이런식으로 찍어보니 값이 올바르게나오더라구요..


    혹시 이부분이 왜그런건지 여쭤봐도될까요!?

    0
  • 로그인을 하시면 답변을 등록할 수 있습니다.