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 |
댓글