본문 바로가기
스프링

스프링 1-8. Object Mapper

by 호놀롤루 2022. 3. 15.

1. 개요

스프링에서 Object(객체)를 Json으로 반환받을 때, ObjectMapper라는 것에 의해 변환되어 내려온다.

 

이 과정을 알아야 에러를 줄이고 효율적인 코드를 쓸 수 있다.

 

2. 사용법

2-1. dto

package com.example.objectmapper;

import com.fasterxml.jackson.annotation.JsonProperty;

public class User {
    private String name;
    private int age;

    @JsonProperty("phone_number")
    private String phoneNumber;

    public User() {
        this.name = null;
        this.age = 0;
        this.phoneNumber = null;
    }

    public User(String name, int age, String phoneNumber) {
        this.name = name;
        this.age = age;
        this.phoneNumber = phoneNumber;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public String getPhoneNumber() {
        return phoneNumber;
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", phoneNumber='" + phoneNumber + '\'' +
                '}';
    }
}

user객체를 통해서 변환과정을 확인할 것이다.

 

 

2-2. test

src 하위 폴더는 main과 test다. ObjectMapper는 test에서 확인할 거다.

@SpringBootTest
class ObjectMapperApplicationTests {

    @Test
    void contextLoads() throws JsonProcessingException {
        System.out.println("hello");

        var objectMapper = new ObjectMapper();

        // object -> text
        // object mapper는 get method를 활용한다.
        var user = new User("steve", 32, "010-1234-1234");

        var text = objectMapper.writeValueAsString(user);
        System.out.println(text);

        // text -> object
        var objectUser = objectMapper.readValue(text, User.class);
        System.out.println(objectUser);

    }

}

우선 object를 text형태의 Json으로 만드는 것은 ObjectMapper.writeValueAsString(object) 라는 기능이다.

그런데 이 때, 객체에 getter가 없으면 에러가 뜬다. ObjectMapper가 getter를 참조해서 Json 데이터를 만들기

때문이다.

 

반대로, Json데이터를 Object로 만드는 것은 ObjectMapper.readValue(Json, object.class) 라는 기능이다.

그런데 이 메소드는 object의 Default Constructor을 참조한다.

즉, 오버로딩 해서 파라미터를 받는 constructor밖에 없다면 에러가 난다는 말이다.

그래서 Json 데이터를 object로 변환하려면

public User() {
    this.name = null;
    this.age = 0;
    this.phoneNumber = null;
}

파라미터를 받지 않는 Default Constructor 가 있어야 한다.

 

정리하면

1. Object -> Text  바꿀 , getter 있어야 한다.

2. Text -> Object  바꿀 , default Constructor 필요로 한다.

주의할 , getter 아닌 메소드인데 get 붙이면 text 바뀌면서 에러가 난다.

이름 붙일  조심해야 

ObjectMapper 규칙을  따지니  지켜야 한다.

 

 

'스프링' 카테고리의 다른 글

스프링 2-1. IoC, DI  (0) 2022.03.17
스프링 2-2. Application Context  (0) 2022.03.17
스프링 1-7. Response  (0) 2022.03.15
스프링 1-6. DELETE API  (0) 2022.03.15
스프링 1-5. PUT API  (0) 2022.03.15

댓글