Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java에서 Jackson 라이브러리를 활용해 XML을 POJO 객체로 변환하는 방법

Jackson은 Java 생태계에서 가장 널리 사용되는 데이터 바인딩 라이브러리 중 하나입니다. 원래 JSON 처리에 특화되어 있지만, jackson-dataformat-xml 모듈을 함께 사용하면 XML 형식의 데이터도 손쉽게 다룰 수 있습니다.

이 라이브러리는 강력한 데이터 바인딩 기능을 제공하여, 커스텀 Java 객체(POJO)를 JSON으로 직렬화하거나 그 반대로 역직렬화하는 작업을 간편하게 수행할 수 있습니다. 마찬가지 방식으로 XmlMapper 클래스의 readValue() 메서드를 사용하면 XML 문자열을 POJO 객체로 변환할 수 있습니다.

사전 준비: 의존성 추가

XML 변환 기능을 사용하려면 프로젝트에 아래 의존성을 추가해야 합니다.

<dependency>
    <groupId>com.fasterxml.jackson.dataformat</groupId>
    <artifactId>jackson-dataformat-xml</artifactId>
    <version>2.15.2</version>
</dependency>

readValue() 메서드 문법

public <T> T readValue(XMLStreamReader r, Class<T> valueType) throws IOException
  • r: 파싱할 XML 데이터가 담긴 입력 스트림 또는 문자열
  • valueType: 변환될 대상 클래스 타입 (POJO 클래스)

예제 코드

아래 예제는 XML 문자열을 Person POJO 객체로 변환하는 전체 과정을 보여줍니다.

import com.fasterxml.jackson.dataformat.xml.*;

public class XMLToPOJOTest {
   public static void main(String args[]) throws Exception {
      try {
         XmlMapper xmlMapper = new XmlMapper();
         Person pojo = xmlMapper.readValue(getXmlString(), Person.class);
         System.out.println(pojo);
      } catch(Exception e) {
         e.printStackTrace();
      }
   }

   private static String getXmlString() {
      return "<person> <firstName>Adithya</firstName>"
            + "<lastName>Jai</lastName>"
            + "<address>Bangalore</address></person>";
   }
}

// POJO 클래스
class Person {
   private String firstName;
   private String lastName;
   private String address;

   public String getFirstName() {
      return firstName;
   }
   public void setFirstName(String firstName) {
      this.firstName = firstName;
   }
   public String getLastName() {
      return lastName;
   }
   public void setLastName(String lastName) {
      this.lastName = lastName;
   }
   public String getAddress() {
      return address;
   }
   public void setAddress(String address) {
      this.address = address;
   }

   @Override
   public String toString() {
      return "Person[ " +
             "firstName = " + firstName +
             ", lastName = " + lastName +
             ", address = " + address +
             " ]";
   }
}

코드 설명

  1. XmlMapper 인스턴스 생성: new XmlMapper()로 XML 전용 매퍼 객체를 만듭니다.
  2. readValue() 호출: XML 문자열과 대상 클래스(Person.class)를 전달하면, Jackson이 XML 요소 이름과 POJO 필드 이름을 자동으로 매핑합니다.
  3. 결과 확인: 변환된 객체의 toString() 메서드를 통해 값이 올바르게 바인딩되었는지 확인할 수 있습니다.

실행 결과

Person[ firstName = Adithya, lastName = Jai, address = Bangalore ]

이처럼 Jackson의 XmlMapper를 활용하면 별도의 복잡한 파싱 로직 없이도 XML 데이터를 Java 객체로 깔끔하게 변환할 수 있습니다. 반대로 writeValueAsString() 메서드를 사용하면 POJO 객체를 XML 문자열로 직렬화하는 것도 가능하니, REST API 개발 시 유용하게 활용해 보시기 바랍니다.