1. 개요

이 자습서에서는 HttpURLConnection을 사용하여 JSON POST 요청 을 만드는 방법을 보여줍니다 .

2. HttpURLConnection을 사용하여 JSON POST 요청 작성

2.1. URL 개체 만들기

HTTP POST 메서드를 통해 JSON 데이터를 받아들이는 대상 URI 문자열 URL 객체를 만들어 보겠습니다 .

URL url = new URL ("https://reqres.in/api/users");

2.2. 연결 열기

위의 URL 객체에서 openConnection 메서드를 호출 하여 HttpURLConnection 객체 를 가져올 수 있습니다.

추상 클래스이므로 HttpURLConnection을 직접 인스턴스화 할 수 없습니다 .

HttpURLConnection con = (HttpURLConnection)url.openConnection();

2.3. 요청 방법 설정

POST 요청을 보내려면 요청 메서드 속성을 POST로 설정해야합니다.

con.setRequestMethod("POST");

2.4. 요청 콘텐츠 유형 헤더 매개 변수 설정

설정 "콘텐츠 유형" 에 요청 헤더 "응용 프로그램 / JSON"를 JSON 형식으로 요청 내용을 보내. 요청 본문을 JSON 형식으로 보내려면이 매개 변수를 설정해야합니다.

그렇게하지 않으면 서버는 HTTP 상태 코드 "400-bad request"를 반환합니다.

con.setRequestProperty("Content-Type", "application/json; utf-8");

또한 콘텐츠 유형과 함께 문자 집합 인코딩을 언급했습니다. 이는 요청 콘텐츠 인코딩이 기본 인코딩 인 UTF-8 인코딩과 다른 경우에 유용합니다.

2.5. 응답 형식 유형 설정

원하는 형식으로 응답을 읽으 려면  “Accept” 요청 헤더를 “application / json” 으로 설정합니다.

con.setRequestProperty("Accept", "application/json");

2.6. 콘텐츠를 보내는 데 연결이 사용되는지 확인

요청 내용을 보내려면 URLConnection 객체의 doOutput 속성을 true로 설정해 보겠습니다 .

그렇지 않으면 연결 출력 스트림에 콘텐츠를 쓸 수 없습니다.

con.setDoOutput(true);

2.7. 요청 본문 생성

사용자 지정 JSON 문자열을 만든 후 :

String jsonInputString = "{"name": "Upendra", "job": "Programmer"}";

다음과 같이 작성해야합니다.

try(OutputStream os = con.getOutputStream()) {
    byte[] input = jsonInputString.getBytes("utf-8");
    os.write(input, 0, input.length);			
}

2.8. 입력 스트림에서 응답 읽기

응답 콘텐츠를 읽을 입력 스트림을 가져옵니다. try-with-resources를 사용하여 응답 스트림을 자동으로 닫아야합니다.

전체 응답 내용을 읽고 최종 응답 문자열을 인쇄합니다.

try(BufferedReader br = new BufferedReader(
  new InputStreamReader(con.getInputStream(), "utf-8"))) {
    StringBuilder response = new StringBuilder();
    String responseLine = null;
    while ((responseLine = br.readLine()) != null) {
        response.append(responseLine.trim());
    }
    System.out.println(response.toString());
}

응답이 JSON 형식 인 경우 Jackson 라이브러리, Gson 또는 org.json 과 같은 타사 JSON 파서를 사용 하여 응답을 파싱합니다.

3. 결론

이 기사에서는 HttpURLConnection을 사용하여 JSON 콘텐츠 본문으로 POST 요청을 만드는 방법을 배웠습니다 .

항상 그렇듯이 관련 코드 조각은 GitHub 에서 찾을 수 있습니다.