Springboot

[스프링 부트] Object Mapper

코딩 못하는 감자 2024. 6. 25. 21:35
@SpringBootTest
class RestApiApplicationTests {

	@Autowired
	private ObjectMapper objectMapper;

	@Test
	void contextLoads() throws JsonProcessingException {
		var user = new UserRequest();
		user.setUserName("홍길동");
		user.setUserAge(10);
		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);
	}

}

 

ObjectMapper의 역활 

responsebody로 json을 받을 때 dto로 역직렬화를 해주고,

json으로 응답을 내릴 때 직렬화를 해준다. 

 

ObjectMapper는 변수에 직렬화를 할 때 변수에 매칭되는 것이 아니라 

get 이름이 붙은 메소드에 매칭이 된다.

 

반대로 역직렬화를 할 때에는 

set 이름이 붙은 메소드에 매칭이 된다.

 

example: getName, getHumanAge

또한 json이 출력된 것을 확인하면 

name, human_age 와 같이 스네이크 형식으로 바뀌어서 출력된 것을 확인할 수 있다. 

 

따라서 getUser()와 같이 다른 get으로 시작하는 메소드를 선언하면 

직렬화가 될 때 다른 값을 받을 수 있다. 

이에 대한 해결책으론 @JsonIgnore 어노테이션을 붙여 json으로 사용하지 않겠다고 선언하면 된다.