Spring
Object Mapper
개발자 김혜린
2022. 4. 23. 16:54
Object Mapper가 하는 일 :
1. TEXT 형태의 JSON -> Object로 바꿔줌
2. Object -> TEXT 형태의 JSON로 바꿔줌
Object Mapper의 예 :
1. Controller에서, TEXT 형태의 JSON 요청이 들어오면 자동적으로 Object로 바꿔줬었음
2. Responses를 Object로 리턴하게 되면, 자동적으로 TEXT 형태의 JSON으로 바꿔줬었음
이번엔 직접 Object Mapper를 객체로 만들어서 사용해보자
첫 번째로는 Object -> TEXT 형태의 JSON
두 번째로는 TEXT 형태의 JSON -> Object
만약 위와 같은 예를 사용해야 할 때는,
ObjectMapper를 적극 활용하자!
package com.example.object_mapper;
import com.fasterxml.jackson.annotation.JsonProperty;
public class User {
private String name;
private int age;
@JsonProperty("phone_number")
private String phoneNumber;
public User(){ //(2) 예시의 기본 생성자 추가해줌
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 User getDefaultUser(){ //특정 클래스에 get 메소드가 아니라 이런 메소드를 만들 때도 있음
return new User("defult",0,"010-1111-2222"); //클래스 이름에 get을 붙여버리면 object mapper가 착각하므로,
//내가 object mapper를 활용하려면 클래스에 get이 붙은 메소드를 만들면 안된다.
}
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 +
'}';
}
}
package com.example.object_mapper;
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 {
System.out.println("---------------------");
var objectMapper = new ObjectMapper(); //직접 객체로 만들어서 활용해보자
// (1) object->TEXT
var user = new User("steve",10,"010-1111-2222"); //생성자 오버로딩으로 객체 초기화
var text = objectMapper.writeValueAsString(user);
System.out.println(text);
//실행 -> 에러남
//object->TEXT 할 때, object mapper는 get 메소드를 활용한다. -> User 클래스에 getter 메소드 만들어줌
// (2) TEXT->object
var objectUser = objectMapper.readValue(text, User.class); //인자에 처음엔 Json 넣어주고, 어떤 클래스 오브젝트를 만들것인지 넣어줌
System.out.println(objectUser);
//실행 -> 에러남
//생성자 오버로딩을 했기 때문에 현재 기본 생성자가 없다.
//TEXT 형태의 JSON -> Object 할 때, object mapper를 실행하려면 기본 생성자가 있어야 한다.
}
}