JAVA/Spring

Jackson과 Lombok @Data 어노테이션을 이용한 JSON 데이터 처리

min민 2024. 12. 31.

Jackson과 Lombok @Data 어노테이션을 이용한 JSON 데이터 처리

자바에서 JSON 데이터를 자바 객체로 변환할 때는 Jackson 라이브러리를 많이 사용한다.

 

Jackson은 ObjectMapper를 사용하여 JSON 데이터를 쉽게 자바 객체로 변환할 수 있게 해준다.

 

이번 포스팅에서는 Jackson을 활용해 JSON 데이터를 객체로 변환하는 방법과, Lombok의 @Data 어노테이션을 사용하여 자동으로 생성된 메서드들이 어떻게 유용하게 작동하는지 살펴보겠다.

 

또한, 여러 클래스에 @Data 어노테이션을 사용할 경우에도 어떻게 정확하게 값을 추출할 수 있는지에 대해 설명할 것이다.

 

 

 

Jackson을 이용한 JSON 데이터 변환

Jackson은 JSON 데이터를 자바 객체로 변환하는 데 매우 유용하다.

 

ObjectMapper를 사용하여 JSON 데이터를 원하는 자바 객체에 매핑할 수 있다.

이때 JSON 데이터에서 "answer"와 같은 특정 필드를 자바 객체의 필드에 자동으로 매핑할 수 있다.

 

 

 

 

Lombok의 @Data 어노테이션

@Data 어노테이션은 Lombok 라이브러리의 기능으로,

 

해당 클래스에 대해 getter, setter, toString, equals, hashCode 메서드를 자동으로 생성한다.

 

이 어노테이션 덕분에 자바 클래스를 작성할 때 번거로운 메서드들을 직접 작성할 필요가 없으며, 필요한 메서드를 자동으로 생성해준다.

 

예를 들어, 아래와 같은 클래스를 정의했다고 가정하자.

@Data
public class SubmissionRequest {
    private String user;
    private String answer;
}

@Data 어노테이션이 붙은 클래스는 **getUser()**와 getAnswer() 메서드를 자동으로 생성해준다.

이를 통해 객체를 생성한 후, getAnswer() 메서드를 호출하여 answer 값을 가져올 수 있다.

 

 

 

 

Jackson과 Lombok을 함께 사용하기

Jackson 라이브러리와 Lombok의 @Data 어노테이션을 결합하면, JSON 데이터를 자동으로 자바 객체로 변환하고, 그 객체에서 자동으로 생성된 getter 메서드를 통해 필드 값을 쉽게 가져올 수 있다.

 

아래는 JSON 데이터와 그 데이터를 자바 객체로 변환하는 코드 예시이다.

 

예시 코드

  1. JSON 데이터:
{
    "user": "미니",
    "answer": "java.io.BufferedReader br = new java.io.BufferedReader(new java.io.InputStreamReader(System.in)); int n = Integer.parseInt(br.readLine()); int sum = 0; String[] inputs = br.readLine().split(\" \"); for (int i = 0; i < n; i++) sum += Integer.parseInt(inputs[i]); System.out.println(sum);"
}

 

2. 자바 클래스 (SubmissionRequest):

@Data
public class SubmissionRequest {
    private String user;
    private String answer;
}

 

3. ObjectMapper를 이용한 JSON → 자바 객체 변환:

import com.fasterxml.jackson.databind.ObjectMapper;

public class Main {
    public static void main(String[] args) {
        String json = "{\"user\":\"미니\", \"answer\":\"java.io.BufferedReader br = new java.io.BufferedReader(new java.io.InputStreamReader(System.in)); int n = Integer.parseInt(br.readLine()); int sum = 0; String[] inputs = br.readLine().split(\\\" \\\"); for (int i = 0; i < n; i++) sum += Integer.parseInt(inputs[i]); System.out.println(sum);\"}";

        try {
            // ObjectMapper를 이용해 JSON을 자바 객체로 변환
            ObjectMapper objectMapper = new ObjectMapper();
            SubmissionRequest request = objectMapper.readValue(json, SubmissionRequest.class);

            // 변환된 객체에서 getAnswer() 메서드로 answer 값을 가져옴
            System.out.println("Answer: " + request.getAnswer());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

 

위 코드에서 ObjectMapper를 사용하여 JSON 데이터를 SubmissionRequest 클래스 객체로 변환하고, request.getAnswer()를 호출하여 answer 값을 추출한다.

 

이렇게 하면 JSON 데이터에서 "answer" 필드가 SubmissionRequest 객체의 answer 필드에 자동으로 매핑된다.

 

 

 

 

@Data 어노테이션이 많은 클래스가 있을 경우

@Data 어노테이션이 여러 클래스에 적용된 경우, 각 클래스에서 정의된 answer 필드를 정확히 찾아서 사용할 수 있다. 중요한 점은 JSON 데이터가 어떤 클래스에 매핑될지 명확히 지정하는 것이다.

예를 들어, 두 개의 클래스가 각각 answer 필드를 가지고 있다고 가정하자.

 

@Data
public class SubmissionRequest {
    private String user;
    private String answer;
}

@Data
public class AnotherRequest {
    private String user;
    private String answer;
}

이때 ObjectMapper를 사용하여 JSON 데이터를 SubmissionRequest 클래스나 AnotherRequest 클래스에 맞게 변환하면, 각 클래스에서 제공하는 getAnswer() 메서드를 통해 각각의 answer 값을 정확하게 얻을 수 있다.

 

 

예시 코드: 클래스가 여러 개인 경우

ObjectMapper objectMapper = new ObjectMapper();

// JSON 데이터를 SubmissionRequest 객체로 변환
SubmissionRequest submissionRequest = objectMapper.readValue(json, SubmissionRequest.class);

// JSON 데이터를 AnotherRequest 객체로 변환
AnotherRequest anotherRequest = objectMapper.readValue(json, AnotherRequest.class);

// 각 객체에서 getAnswer()를 호출하여 answer 값을 가져옴
System.out.println("Answer from SubmissionRequest: " + submissionRequest.getAnswer());
System.out.println("Answer from AnotherRequest: " + anotherRequest.getAnswer());

 

이처럼, 각 클래스에 명확하게 JSON 데이터를 매핑하고 각 클래스의 메서드를 호출하면, 여러 클래스가 존재하는 상황에서도 원하는 값을 정확하게 추출할 수 있다.

 

 

 

 

총 정리

  • Jackson은 JSON 데이터를 자바 객체로 변환할 때 매우 유용한 라이브러리이다.
    • ObjectMapper를 통해 JSON 데이터를 자바 객체로 변환하고, 변환된 객체에서 자동으로 생성된 getter 메서드를 통해 필드 값을 쉽게 가져올 수 있다.
  • Lombok의 @Data 어노테이션은 클래스에 자동으로 getter, setter, toString, equals, hashCode 메서드를 생성해주므로, 코드 작성이 간결해진다.
  • @Data 어노테이션이 여러 클래스에 달린 경우에도 Jackson 라이브러리가 각 클래스에 맞게 데이터를 변환하여, 필드 값을 정확히 추출할 수 있다.

댓글