IT한 것/java

HttpURLConnection 이용하여 JSON 전송시 서버가 응답이 없는 경우

lovian 2021. 4. 3. 11:47

아래는 java의 기본 제공 기능을 이용하여 웹 서버에 통신을 해서 JSON 데이터를 주고 받으려고 작성한 코드이다

      conn = (HttpURLConnection) url.openConnection();

      conn.setRequestMethod("POST");
      conn.setDoOutput(true);
      conn.setDoInput(true);
      conn.setDefaultUseCaches(false);

      OutputStream os = conn.getOutputStream();
      os.write(message);
      os.close();

      InputStream is = conn.getInputStream();
      while (is.available() > 0) {
        baos.write((char) is.read());
      }
      is.close();

진짜 별거 없는 코드인데, 서버가 응답을 안주는 경우가 있다.

처음엔 버그인가 한참 고민을 했었는데, 단순히 request header에 Content-Type을 application/json으로 설정해주자 아무 문제 없이 동작하기 시작했다.

 

왜일까?

이게 왜인지 한번 고민을 해봤다.

서버는 HTTP 서버다, json 이던 뭐던 HTTP header와 body가 있어야하는 것이 당연하다.

그리고 body는 header의 Content-Type에 따라서 어떻게 해석할지 고민을 해야한다. 아마 Content-Type이 없다면, 기본적으로 HTML 데이터로 판단하지 않을까? 혹은 각 Content-Type별로 처리하는 해석기가 등록되지 않은 상황에는 엉뚱한 동작을 할 수 도 있겠다는 판단을 내릴 수도 있다.

 

사실 위의 예제로 접속한 서버는 Firebase 서버로 push notification을 날리기 위해서였다.

내부 구조는 확실하게 알 수 없었지만, Content-Type을 잘 넣어주는 것으로 마친다.