java로 api호출 및 JSON 파싱 (Jackson) 함께 통합하는 버전 샘플

다음은 Java에서 REST API를 호출하는 가장 기본적인 예제 두 가지 방법입니다 — 표준 HttpURLConnection을 사용하는 방법과 Java 11 이상에서 제공하는 HttpClient를 사용하는 방법입니다.


HttpURLConnection 사용 예제

HttpURLConnection은 모든 Java 버전에서 사용할 수 있는 기본 표준 라이브러리입니다.

java
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;

public class ApiCallExample {
public static void main(String[] args) {
try {
String apiUrl = "https://jsonplaceholder.typicode.com/posts";
URL url = new URL(apiUrl);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();

// 요청 설정
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "application/json; utf-8");
conn.setRequestProperty("Accept", "application/json");
conn.setDoOutput(true);

// 요청 본문 전송
String jsonInputString = "{\"title\": \"foo\", \"body\": \"bar\", \"userId\": 1}";
try (OutputStream os = conn.getOutputStream()) {
byte[] input = jsonInputString.getBytes("utf-8");
os.write(input, 0, input.length);
}

// 응답 읽기
int responseCode = conn.getResponseCode();
System.out.println("Response Code: " + responseCode);

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

conn.disconnect();

} catch (Exception e) {
e.printStackTrace();
}
}
}

이 예제는 POST 요청으로 JSON 데이터를 전송하고 서버의 응답을 출력합니다.​


HttpClient (Java 11+) 사용 예제

Java 11 이상에서는 java.net.http.HttpClient 클래스를 사용하면 훨씬 간단하게 API 요청을 수행할 수 있습니다.

java
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

public class HttpClientExample {
public static void main(String[] args) throws Exception {
// HttpClient 생성
HttpClient client = HttpClient.newHttpClient();

// GET 요청 생성
HttpRequest request = HttpRequest.newBuilder()
.uri(new URI("https://jsonplaceholder.typicode.com/posts/1"))
.GET()
.build();

// 요청 전송 및 응답 수신
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());

System.out.println("Status Code: " + response.statusCode());
System.out.println("Response Body: " + response.body());
}
}

이 방식은 비동기식(client.sendAsync)으로도 쉽게 확장할 수 있으며, SSL 인증, Header 추가, Timeout 설정 등을 간단히 처리할 수 있습니다.​

 

다음은 Java 11의 HttpClient와 Jackson의 ObjectMapper를 함께 사용하여 API를 호출하고 JSON을 Java 객체로 파싱하는 통합 예제입니다. 이 방식은 REST API에서 JSON 응답을 받을 때 자동으로 Java DTO 클래스로 변환할 수 있어, 매우 효율적입니다.​


프로젝트 의존성

Gradle을 사용하는 경우 build.gradle에 다음을 추가합니다:

text
dependencies {
implementation 'com.fasterxml.jackson.core:jackson-databind:2.17.0'
}

Maven 사용 시 pom.xml에 다음을 추가합니다:

xml
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.17.0</version>
</dependency>

JSON 파싱 통합 Java 예제

java
import com.fasterxml.jackson.databind.ObjectMapper;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

// JSON 데이터를 매핑할 DTO 클래스
class User {
private int id;
private String name;
private String username;
private String email;

// 기본 생성자 (Jackson에서 필요)
public User() {}

// Getter, Setter
public int getId() { return id; }
public void setId(int id) { this.id = id; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public String getUsername() { return username; }
public void setUsername(String username) { this.username = username; }
public String getEmail() { return email; }
public void setEmail(String email) { this.email = email; }

@Override
public String toString() {
return "User{id=" + id + ", name='" + name + "', username='" + username + "', email='" + email + "'}";
}
}

public class JacksonHttpClientExample {
public static void main(String[] args) {
try {
// HttpClient 생성
HttpClient client = HttpClient.newHttpClient();
URI uri = new URI("https://jsonplaceholder.typicode.com/users/1");

// GET 요청 생성
HttpRequest request = HttpRequest.newBuilder()
.uri(uri)
.header("Accept", "application/json")
.GET()
.build();

// 요청 실행 및 응답 수신
HttpResponse<String> response =
client.send(request, HttpResponse.BodyHandlers.ofString());

System.out.println("Status Code: " + response.statusCode());
System.out.println("Raw JSON: " + response.body());

// Jackson ObjectMapper로 JSON → Java 객체 변환
ObjectMapper mapper = new ObjectMapper();
User user = mapper.readValue(response.body(), User.class);

// 변환된 객체 출력
System.out.println("Parsed Object: " + user);

} catch (Exception e) {
e.printStackTrace();
}
}
}

이 코드는 https://jsonplaceholder.typicode.com/users/1에서 사용자 정보를 가져와 User 객체로 역직렬화(deserialize)합니다.
ObjectMapper는 내부적으로 필드명을 기준으로 JSON 키를 Java 필드에 자동 매핑합니다.​


참고 포인트

  • Jackson은 필드명이 JSON 키와 다를 때 @JsonProperty("jsonKey")를 통해 명시적으로 매핑할 수 있습니다.

  • 응답을 배열(JSON Array) 형태로 받을 경우 User[] users = mapper.readValue(json, User[].class); 형태로 처리할 수 있습니다.

  • Spring Boot 환경에서는 자동으로 ObjectMapper Bean이 등록되어 있어 동일한 방식으로 컨트롤러나 서비스 로직에 쉽게 적용할 수 있습니다.​