2014-07-11 5 views
4

다음 코드를 사용하여 JSON 요청을 웹 서비스에 보내고 잘못된 요청으로 페이로드에 자세한 JSON 오류 응답과 함께 400 메시지 코드를 반환합니다.HttpURLConnection : 400 응답의 페이로드를 읽는 방법

내가 HttpURLConnection를 사용하는 경우는 즉시 IOException을 발생하고 연결의 InputStreamnull이기 때문에 나는 아마도, 클라이언트 측에서이 페이로드를 검색 할 수있는 방법을 이해하지 않습니다.

HttpURLConnection connection = this.connect(url); 
connection.setRequestMethod(method); 
OutputStreamWriter out = new OutputStreamWriter(connection.getOutputStream()); 
out.write(jsonMessage); 
InputStream is = null; 
try { 
    is = connection.getInputStream(); // IOException is thrown, how can I still get payload?? 
} catch (Exception e) { 
} 
String response = getStringFromInputStream(is); 

또한 getErrorStream()을 사용하려고하지만,이 내가 할 때, 예를 들어 볼 수있는 페이로드보다는 아파치 톰캣의 기본 오류 페이지를 포함했다 시각적 인 REST API 클라이언트를 사용합니다.

+0

미안하지만 .... 질문이 의미가 없습니다 - HTTP를 통한 서버 - 클라이언트 대화에 대해 이야기하고 있으며 클라이언트 - 서버 대화를 설명하는 코드를 보여줍니다. – specializt

+0

다음은 SO 커뮤니티 위키에 대한 것입니다. 도움이 될 수있는 HttpURLConnection : http://stackoverflow.com/questions/2793150/how-to-use-java-net-urlconnection-to-fire-and-handle-http-requests –

+0

getErrorStream()이 실제로 수행 한 작업을 반환했습니다. 반환되었습니다. 그것이 Tomcat 구성을 반환하려는 의도가 아니라면 어딘가에 있습니다. – EJP

답변

-2

상태 코드가 오류 메시지 인 경우 HTTPUrlConnection이 표준 페이로드를 단순히 전송하지 않는다는 것을 나타내는 수많은 스레드가 있습니다. stackoverflow.com/questions/21526082/ ... tbray.org/ongoing/When/201x/2012/01/17/HttpURLConnection의 경우이 블로그를 참조하십시오.

나는 훨씬 더 강력한 아파치 패키지를 사용했다.

+1

그런 것을 찾지 못했습니다. 적어도 인용 된 스레드는 그렇게 말하지 않습니다. [이 답변] (http://stackoverflow.com/a/21529527/207421) 솔루션을 제공합니다. – EJP

+3

'java.net.HttpURLConnection'을 사용할 때 오류 응답 코드를 받으면'getInputStream()'을 사용하여 본문을 읽을 수 없습니다. 이 경우에는 getErrorStream()을 사용하여 본문을 읽어야합니다. – Teixi