Java - Spring <ObjectMapper>

Gihongg·2024년 3월 17일

Spring Boot

목록 보기
8/24

ObjectMapper란?

ObjectMapper를 자바에서 JSON과 객체 간의 변환을 담당하는 도구라고 생각해보자. 객체를 JSON으로 변환할 때는 이 객체에 들어있는 정보를 JSON 형식으로 만들어주고, JSON을 객체로 변환할 때는 JSON에 들어있는 정보를 객체로 만들어준다.


직렬화

  1. DTO 준비하기
    언제나와 같이 DTO 클래스를 준비해준다.
@Data
@AllArgsConstructor
@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class) //SnakeCase로 변환
public class UserInfo{
    private String userName,phoneNumber, email;
    private Boolean isKorean; 
  
    public String getUserName() {
        return userName;
    }

    public String getPhoneNumber() {
        return phoneNumber;
    }

    public String getEmail() {
        return email;
    }

    public Boolean getIsKorean() {
        return isKorean;
    }

}
  1. 객체를 생성해준다.
	var user= new UserInfo();
        
	user.setUserName("Gildong");
        user.setEmail("hong@gmail.com");
        user.setPhoneNumber("010-9876-5432");
        user.setIsKorean(true);

  1. ObjectMapper를 생성해주자
//스프링에서 관리하는 bean들 중 자동으로 
//매핑되는 ObjectMapper들을 가져오는 어노테이션
@Autowired
private ObjectMapper objectMapper;
  1. 이제 ObjectMapper을 이용해 직렬화를 하자

String json = objectMapper.writeValueAsString(user);

  1. 객체를 직렬화한 JSON을 출력 하면 아래와 같이 나온다.
    {"phone_number":"010-9876-5432","is_korean":true,"user_email":"hong@gmail.com"}

역직렬화

역직렬화: Json 형태=> 객체

var dto=objectMapper.readValue(json, UserInfo.class);
System.out.println(dto);

중요한 점

  • getter 메서드를 모두 지우고 생성자 함수를 사용해서 객체를 만들면 오브젝트 매퍼는 아무것도 받지 못한다.

  • 그 이유는 오브젝트 매퍼는 변수에 매칭되는 것이 아닌 get으로 시작되는 메소드에 매칭되는 것이기 때문이다.

  • 오브젝트 매핑은 직렬화를 해줄 때 변수에 따라 직렬화를 하는 것 이 아닌 get~메서드를 따라 직렬화를 한다.

  • 또한 매핑 시 get이후의 글자를 사용한다. 예를들어 getIsKorean = true이라면 매핑된 정보는 "isKorean": true 이다.

  • 객체의 특정 변수를 직렬화하고 싶지 않다면 @JsonIgnore 어노테이션을 사용하면 된다. 아래와 같다.

    @JsonIgnore //원하지 않는 정보를 오브젝트 매핑 할 때 Json ignore을 붙이면 무시한다.
    public String getUserName() {
        return userName;
    }
profile
전천후 개발자

0개의 댓글