Object Mapper 모범사례

Minseo Kang·2023년 2월 10일
1

Spring Boot

목록 보기
10/27
post-thumbnail

01. Object Mapper 개념


Object Mapper

  • Json(Text) 형태를 Object로 바꿔줌, 혹은 그 반대
  • Controller에서 response를 Object로 받으면 Json(Text)로 바꿔줌
  • Controller에서 request를 Json(Text)로 받으면 Object로 바꿔줌

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;
    }

    // getDefaultUser로 하면 Object Mapper가 잘못 인식하기 때문에 get 없애야 함
    public User defaultUser() {
        return new User("default", 0, "010-1111-3333");
    }

    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 + '\'' +
                '}';
    }
}



02. Object Mapper 생성


Test 코드에 작성

직접 Object Mapper를 객체로 생성해서 활용

var objectMapper = new ObjectMapper(); // var로 타입추론



03. Object -> Json(Text)


개념

  • getter 메서드 참조
  • dto클래스에 getter 있어야 함
  • dto 클래스의 멤버 변수에 해당되지 않는 것에 get 붙이면 getter 메서드로 인식하기 때문에 메서드 작성 시 유의

코드 작성

var user = new User("steve", 10, "010-1111-2222");
var text = objectMapper.writeValueAsString(user);
System.out.println(text);



04. Json(Text) -> Object


개념

  • dto 클래스에 디폴트 생성자 있어야 함
  • objectMapper.readValue(Json(Text), 어떤 클래스 타입으로 바꿀 것인지)

코드 작성

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



전체 테스트 코드

package com.example.objectmapper;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class ObjectMapperApplicationTests {

	@Test
	void contextLoads() throws JsonProcessingException {

		var objectMapper = new ObjectMapper();

		// object -> text
		var user = new User("steve", 10, "010-1111-2222");
		var text = objectMapper.writeValueAsString(user);
		System.out.println(text);

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

}

실행 결과




05. 정리


변환필수 메소드구현
Object -> Json(Text)getterObjectMapper 객체의 writeValueAsString(object)
Json(Text) -> Obejctdefault 생성자ObjectMapper 객체의 readValue(ㄴtring, 클래스.class)

0개의 댓글