HttpURLConnection을 사용하여 JSON POST 요청 만들기
URL url = new URL("요청url");
위의 URL 객체에서 openConnection 메서드를 호출하여 HttpConnection 객체를 가져올 수 있습니다.
추상 클래스 이므로 HttpURLConnection을 직접 인스턴스화 할 수 없습니다.
HttpURLConnection con = (HttpURLConnection) url.openConneciton();
POST 요청을 보내려면 요청 메서드 속성을 POST로 설정해야합니다.
con.setRequestMethod("POST");
설정 "콘텐츠 유형"에 요청 헤더 "응용 프로그램/JSON"를 JSON 형식으로 요청 내용을 보내 요청 본문을 JSON 형식으로 보내려면 매개 변수를 설정해야합니다.
그렇게 하지 않으면 서버는 HTTP 상태 코드 "400-bad request"를 반환합니다.
con.setRequestProperty("Content-Type","applicaiton/json;utf-8");
또한 콘텐츠 유형과 함께 문자 집합 인코딩을 언급했습니다. 이는 요청 콘텐츠 인코딩이 기본 인코딩 인 UTF-8 인코딩과 다른 경우에 유용합니다.
원하는 형식으로 응답을 읽으려면 "Accept" 요청 헤더를 "application/json"으로 설정합니다.
con.setRequestProperty("Accept","application/json");
요청 내용을 보내려면 URLConnetion 객체의 doOutput 속성을 true로 설정해 보겠습니다.
그렇지 않으면 연결 출력 스트림에 콘텐츠를 쓸 수 없습니다.
con.setDoOutput(true);
사용자 지정 JSON 문자열을 만든 후:
String jsonInputString = "{"name":"Upendra", "job":"programmer"}";
다음과 같이 작성해야합니다.
try{OutputStream os = con.getOutputStream()){
byte[] input = jsonINputString.getBytes("utf-8");
os.write(input, 0, input.length);
}
응답 콘텐츠를 읽을 입력 스트림을 가져옵니다. 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 파서를 사용 하여 응답을 파싱합니다.