728x90
REST API를 호출하여 리턴받은 JSON 데이터를 Java DTO로 파싱하는 방법을 알아보겠습니다. 이번 예제는 JSON 데이터가 2-Depth 구조를 가지며, DTO 내부에 또 다른 DTO를 포함하는 구조를 가정합니다.
1. 준비 사항
REST API 호출과 JSON 파싱을 위해 다음 라이브러리를 사용합니다:
- HttpClient (Java 11+ 기본 제공)
- Jackson 라이브러리 (com.fasterxml.jackson)
<!-- Maven 의존성 추가 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.15.2</version>
</dependency>
2. JSON 데이터 예시
아래와 같은 JSON 데이터를 REST API로부터 받는다고 가정합니다.
{
"id": 1,
"name": "John Doe",
"address": {
"street": "123 Main St",
"city": "Springfield",
"zipCode": "12345"
}
}
3. DTO 클래스 정의
JSON 데이터에 맞는 DTO 클래스를 정의합니다.
// Address DTO
public class AddressDto {
private String street;
private String city;
private String zipCode;
// Getters and Setters
public String getStreet() {
return street;
}
public void setStreet(String street) {
this.street = street;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getZipCode() {
return zipCode;
}
public void setZipCode(String zipCode) {
this.zipCode = zipCode;
}
@Override
public String toString() {
return "AddressDto{" +
"street='" + street + '\'' +
", city='" + city + '\'' +
", zipCode='" + zipCode + '\'' +
'}';
}
}
// User DTO
public class UserDto {
private int id;
private String name;
private AddressDto address;
// Getters and Setters
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 AddressDto getAddress() {
return address;
}
public void setAddress(AddressDto address) {
this.address = address;
}
@Override
public String toString() {
return "UserDto{" +
"id=" + id +
", name='" + name + '\'' +
", address=" + address +
'}';
}
}
4. REST API 호출 및 JSON 파싱
HttpClient를 사용하여 REST API를 호출하고 Jackson 라이브러리로 JSON 데이터를 DTO로 파싱합니다.
import com.fasterxml.jackson.databind.ObjectMapper;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;
public class RestApiExample {
public static void main(String[] args) {
try {
// 1. HttpClient 생성
HttpClient client = HttpClient.newHttpClient();
// 2. HttpRequest 생성
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.example.com/user")) // REST API URL
.GET()
.build();
// 3. REST API 호출
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
// 4. JSON 파싱
ObjectMapper objectMapper = new ObjectMapper();
UserDto user = objectMapper.readValue(response.body(), UserDto.class);
// 5. 결과 출력
System.out.println("Response DTO: " + user);
} catch (Exception e) {
e.printStackTrace();
}
}
}
5. 실행 결과
REST API가 아래 JSON을 반환한다고 가정합니다:
{
"id": 1,
"name": "John Doe",
"address": {
"street": "123 Main St",
"city": "Springfield",
"zipCode": "12345"
}
}
프로그램 실행 시, 출력은 다음과 같습니다:
Response DTO: UserDto{id=1, name='John Doe', address=AddressDto{street='123 Main St', city='Springfield', zipCode='12345'}}
6. 마무리
위 예제는 JSON 데이터를 Java DTO로 파싱하는 가장 기본적인 방법입니다. Jackson 라이브러리는 강력한 기능을 제공하며, 복잡한 JSON 데이터도 쉽게 처리할 수 있습니다.
팁:
- REST API 호출이 많다면, Retrofit 또는 Spring WebClient를 활용해도 좋습니다.
- JSON 데이터가 복잡한 경우, DTO 클래스에 @JsonProperty를 사용해 JSON 필드 이름과 매핑할 수 있습니다.
LIST
'Develop > JAVA' 카테고리의 다른 글
[Java] 메모리 관리 및 가비지 컬렉션: 개념과 예제 (2) | 2024.11.17 |
---|---|
[Java] 오늘날짜 구하기 날짜 더하기 빼기 (3) | 2024.11.14 |
[Java] 크로스 사이트 스크립트 (XSS) 취약점 조치방법 (7) | 2024.10.30 |
[Spring Framework] application.yml 파일에서 값 암호화 (7) | 2024.10.28 |
[Java] Spring Security 에서 SameSite 설정방법 (PG사 결제 시 리턴 후 세션 끊김현상 해결) (6) | 2024.10.24 |