Spring Boot Web의 여러가지 기능-(2)

개발세발·2024년 1월 22일

오브젝트 매퍼

  • ObjectMapper: 스프링부트에서 Json으로 전달되는 데이터를 역직렬화를 통해서 DTO 형태로 바꿔주는 역할과 DTO를 Json 형태로 바꿔주는 직렬화 역할을 함. Jackson라이브러리라고도 하고, Gson도 사용함.
    스프링 부트는 Jackson 라이브러리를 사용함.
package org.example.hellospringboot.model;

import com.fasterxml.jackson.databind.PropertyNamingStrategies;
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
import com.fasterxml.jackson.databind.annotation.JsonNaming;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
@JsonNaming(value=PropertyNamingStrategies.SnakeCaseStrategy.class)
public class UserRequest {
    private String name;
    private Integer userAge; //int를 사용하면 아무런 값이 없을 때 0으로 표현됨. Integer 사용하면 null
    private String email;
    private Boolean isKorean;

}
@SpringBootTest
class HelloSpringbootApplicationTests {
	@Autowired
	private  ObjectMapper objectMapper;

	@Test
	void contextLoads() throws JsonProcessingException {
		var user = new UserRequest();
		user.setName("홍길동");
		user.setUserAge(20);
		user.setEmail("hong@gmail.com");
		user.setIsKorean(true);

		var json = objectMapper.writeValueAsString(user);
		System.out.println(json);

		var dto = objectMapper.readValue(json, UserRequest.class);
		System.out.println(dto);
	}
}
  • 실습은 test에서 진행했음.

  • writeValueAsString()으로 직렬화, readValue()로 역직렬화를 할 수 있음.

  • 오브젝트 매퍼는 메소드에 매칭되어 동작한다.

  • 오브젝트 매퍼는 직렬화를 해줄 때 get이라는 이름이 들어간 메소드를 참고한다.

  • 오브젝트 매퍼는 리플렉션 기반으로, private으로 막아도 동작한다.

0개의 댓글