Jackson 라이브러리는 JSON 데이터와 Java 객체 간의 변환을 손쉽게 해주는 도구로, 특히 ObjectMapper를 사용한 간단하고 직관적인 설정과 활용이 큰 장점입니다.
Jackson 라이브러리 설치 및 설정
Jackson 라이브러리는 Maven이나 Gradle을 사용해 쉽게 설치할 수 있습니다. 각각의 설정 방법을 살펴보겠습니다.
Gradle 설정
Gradle 프로젝트에서는 build.gradle 파일에 아래와 같이 Jackson 라이브러리를 추가합니다.
dependencies {
implementation 'com.fasterxml.jackson.core:jackson-databind:2.14.0'
implementation 'com.fasterxml.jackson.core:jackson-core:2.14.0'
implementation 'com.fasterxml.jackson.core:jackson-annotations:2.14.0'
}
이제 Gradle 빌드 명령어를 실행하여 라이브러리를 설치할 수 있습니다. 터미널에서 아래 명령을 입력하세요:
./gradlew build
Maven 설정
Maven 프로젝트에서는 pom.xml 파일에 Jackson 라이브러리를 다음과 같이 추가합니다.
<dependencies>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.14.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.14.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.14.0</version>
</dependency>
</dependencies>
Maven은 mvn install 명령을 통해 필요한 Jackson 라이브러리를 자동으로 다운로드하고 설치합니다. 터미널에서 아래 명령어를 사용해 Jackson을 설치합니다.
mvn install
이렇게 Gradle이나 Maven을 통해 Jackson 환경을 구축하면 프로젝트에서 JSON 변환을 사용할 수 있습니다.
ObjectMapper 소개 및 기본 사용법
Jackson의 핵심 클래스인 ObjectMapper는 Java 객체를 JSON으로 직렬화하거나, JSON을 Java 객체로 역직렬화하는 데 사용됩니다. ObjectMapper의 기본 사용법과 주요 메서드를 예제와 함께 살펴보겠습니다.
Java 객체를 JSON으로 변환하기 (직렬화)
ObjectMapper를 사용하여 Java 객체를 JSON으로 변환할 수 있습니다. 예를 들어, 한국 사용자를 나타내는 User 클래스를 JSON으로 변환하는 방법입니다.
import com.fasterxml.jackson.databind.ObjectMapper;
class User {
private String name;
private int age;
private String city;
public User() {}
public User(String name, int age, String city) {
this.name = name;
this.age = age;
this.city = city;
}
// Getter & Setter methods
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public int getAge() { return age; }
public void setAge(int age) { this.age = age; }
public String getCity() { return city; }
public void setCity(String city) { this.city = city; }
}
public class Main {
public static void main(String[] args) throws Exception {
User user = new User("홍길동", 30, "서울");
ObjectMapper mapper = new ObjectMapper();
String jsonResult = mapper.writeValueAsString(user);
System.out.println("JSON 출력: " + jsonResult);
}
}
이 코드에서 writeValueAsString() 메서드를 통해 Java 객체를 JSON 문자열로 변환하였습니다. 출력 결과는 아래와 같습니다.
{"name":"홍길동","age":30,"city":"서울"}
JSON을 Java 객체로 변환하기 (역직렬화)
ObjectMapper를 사용하여 JSON 문자열을 Java 객체로 변환할 수도 있습니다. 예를 들어, 사용자 정보를 포함하는 JSON 문자열을 User 객체로 변환하는 코드입니다.
public class Main {
public static void main(String[] args) throws Exception {
String json = "{\"name\":\"김철수\",\"age\":25,\"city\":\"부산\"}";
ObjectMapper mapper = new ObjectMapper();
User user = mapper.readValue(json, User.class);
System.out.println("사용자 이름: " + user.getName());
System.out.println("사용자 나이: " + user.getAge());
System.out.println("사용자 도시: " + user.getCity());
}
}
이 예제에서는 readValue() 메서드를 통해 JSON 문자열을 User 객체로 역직렬화하였습니다.
Jackson을 사용하는 기본 프로젝트 설정
Jackson을 사용하여 JSON 데이터를 처리하는 기본적인 프로젝트 설정을 살펴보겠습니다. 프로젝트 구조를 구성하고, 주요 파일을 생성하여 Jackson의 JSON 직렬화와 역직렬화를 수행하는 방법을 알아봅니다.
1. 프로젝트 디렉터리 구성
기본적인 디렉터리 구조를 다음과 같이 설정합니다.
my-jackson-project/
├── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── Main.java
│ │ └── resources/
│ └── test/
├── build.gradle 또는 pom.xml
└── README.md
2. build.gradle 또는 pom.xml 파일 작성
Gradle 또는 Maven으로 Jackson을 설치하도록 build.gradle 또는 pom.xml 파일을 작성합니다. 앞서 설명한 대로 Jackson 라이브러리를 추가하세요.
3. Java 메인 클래스 및 모델 클래스 작성
src/main/java 디렉터리에 Java 메인 클래스와 모델 클래스를 작성합니다. 위의 User 클래스를 사용하여, JSON 직렬화와 역직렬화를 처리하는 코드를 추가합니다.
예제 메인 클래스(Main.java):
import com.fasterxml.jackson.databind.ObjectMapper;
public class Main {
public static void main(String[] args) {
try {
ObjectMapper mapper = new ObjectMapper();
// 객체 생성 및 JSON으로 변환
User user1 = new User("이영희", 28, "대구");
String json = mapper.writeValueAsString(user1);
System.out.println("직렬화된 JSON: " + json);
// JSON 문자열을 객체로 변환
String jsonString = "{\"name\":\"박철수\",\"age\":35,\"city\":\"광주\"}";
User user2 = mapper.readValue(jsonString, User.class);
System.out.println("역직렬화된 객체: " + user2.getName() + ", " + user2.getCity());
} catch (Exception e) {
e.printStackTrace();
}
}
}
ObjectMapper의 주요 설정 옵션
Jackson의 ObjectMapper는 다양한 설정 옵션을 제공하여 JSON 처리를 더욱 강력하게 합니다. 대표적인 설정으로는 setSerializationInclusion, configure, setPropertyNamingStrategy 등이 있습니다.
1. NULL 값을 포함하지 않고 직렬화
Jackson에서 NULL 값을 포함하지 않고 JSON으로 직렬화하려면 setSerializationInclusion 옵션을 사용합니다.
ObjectMapper mapper = new ObjectMapper();
mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
이 설정을 통해 NULL 값을 가진 필드가 JSON에 포함되지 않도록 처리할 수 있습니다.
2. PropertyNamingStrategy 설정
Jackson에서 JSON 필드의 네이밍 규칙을 설정할 수 있습니다. SNAKE_CASE 규칙을 적용하려면 아래와 같이 설정합니다.
ObjectMapper mapper = new ObjectMapper();
mapper.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE);
예를 들어 firstName 필드는 first_name으로 변환됩니다.
3. Unknown Properties 무시하기
JSON 문자열에 객체에 존재하지 않는 필드가 있을 때 에러가 발생할 수 있습니다. 이 경우 configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false) 옵션을 통해 미지정 필드를 무시할 수 있습니다.
ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
참고 사이트
- Jackson GitHub: https://github.com/FasterXML/jackson
'JAVA' 카테고리의 다른 글
[JAVA] Jackson 컬렉션 및 배열 데이터 처리 (1) | 2024.11.12 |
---|---|
[JAVA] Jackson 고급 직렬화와 역직렬화 설정 (0) | 2024.11.11 |
[JAVA] Jackson 어노테이션 활용법 (0) | 2024.11.10 |
[JAVA] Jackson ObjectMapper란? (1) | 2024.11.09 |
[JAVA] Jackson 이란? (0) | 2024.11.07 |
[JAVA] Map과 JSON 데이터 변환 (0) | 2024.11.06 |
[JAVA] Map을 사용한 데이터 변환과 필터링 (0) | 2024.11.06 |
[JAVA] 고급 Map 패턴 및 활용 예제 (0) | 2024.11.06 |