본문 바로가기
Programming/Springboot

object-mapper 실습

by 우공80 2022. 8. 17.
728x90


object mapper 란?

클라이언트와 서버간에 Text인 JSON을 Parsing하여 Object로 받거나, Object를 Text인 JSON으로 변경하여주는 기능입니다.

실습

여기서는 object-mapper의 동작방식을 알기 위해 명시적으로 object-mapper를 사용하는 방법을 실습하겠습니다.

우선 object-mapper 라는 이름으로 Java 프로젝트를 생성하고, spring web에 dependencies를 설정합니다.

이번에는 main이 아니라 test에 간단한 코드를 심어서 실습을 합니다.

Test에 있는 ObjectMapperApplicationTests에 아래와 같이 추가 코드를 작성합니다.

package com.example.objectmapper;

import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;

@SpringBootTest
class ObjectMapperApplicationTests {

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

		var objectMapper = new ObjectMapper();
		
		//object --> text
		//object mapper는 get method를 참조함 user 에 getter가 필요함
		var user = new User("steve",30,"010-1111-2222");
		var text = objectMapper.writeValueAsString(user);
		System.out.println(text);
		
		
		// text --> object
		// object mapper는 default 생성자가 필요함
		var objectUser = objectMapper.readValue(text, User.class);
		System.out.println(objectUser);
	}

}


User 클래스를 만들어서 object mapper를 통해 주고 받습니다.

package com.example.objectmapper;

import com.fasterxml.jackson.annotation.JsonProperty;

public class User {
	private String name;
	private int age;
	
    //snake_case 테스트하는 부분
	@JsonProperty("phone_number")
	private String phoneNumber;
	
	public User(String name, int age, String phoneNumber) {
		this.name = name;
		this.age = age;
		this.phoneNumber = phoneNumber;
		
	}

	//object mapper는 json --> object 변경할 때 default 생성자가 필요하다
    //default 생성자가 없으면 에러가 발생함
	public User() {
		this.name=null;
		this.age=0;
		this.phoneNumber = null;
		// TODO Auto-generated constructor stub
	}

	//object mapper는 object --> json 으로 변경할 때 getter가 필요하며, 
    //getter가 없으면 에러가 발생한다.
	public String getPhoneNumber() {
		return phoneNumber;
	}

	public int getAge() {
		return age;
	}

	public String getName() {
		return name;
	}

//  object mapper를 사용할 때 이름에 get이 들어가는 method를 만들면 에러가 발생한다.	
//	public User getDefaultUser() {
//		return new User("default",0);
//	}

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

	
}

주석처리한 부분과 같이 object mapper를 사용할 때는 이름에 get이 들어가는 method를 정의해서 사용하게 되면
에러가 발생한다고 합니다. 이 부분만 주의해 주시면 되겠습니다.

위 내용은 FastCampus - Java & SpringBoot로 시작하는 웹 프로그래밍 강의를 참고했습니다.
728x90

댓글