본문 바로가기

개인적으로 공부한 것을 정리해 놓은 블로그입니다 틀린 것이 있으면 댓글 부탁 드립니다!


SPRING BOOT

Spring boot 공부 1 - ObjectMapper

반응형

 

클라이언트 request를 통해 전달된  json 데이터를

Spring의 Object Mapper가 컨트롤러에 정의해놓은

파라미터 중 매칭되는 것을 찾아  Json 값을 Object의 필드와 비교해 바인딩 해준다.

 

이때 json데이터의 키값과 오브젝트 필드명이 일치해야 하는데

json 데이터의 키값은 snake case를 주로 사용하고

java 오브젝트 필드명은 camel case를 사용해여  불일치가 일어난다.

 

이럴경우 해당 오브젝트 필드에

 

@JsonProperties를 통해 특정 필드에 json 키값을 지정할 수 있다.

 

만약 오브젝트 클래스 전체에 대하여 형식지정을 원한다면 

해당 클래스에 @JsonNaming을 붙히면된다

 

@JsonNaming을 통해 네이밍 정책을 정한다

 

 위 의 클래스의 경우 List<Car> 타입의 필드를 가지고 있는데 , 위 클래스처럼 JsonNaming 을 한다고 Car 객체에까지 영향을 주는 것은 아니기 때문에 Car 객체에도 알맞게 설정해 줘야한다. 

 

예를 들어  간혹가다 json 의 키값이 "OTP" 라면 필드명과 json 키 값이 같더라도 

카멜케이스 혹은 스네이크 케이스가 둘다 해당되지 않기 떄문에 @JsonProperties 를 통해 지정해 줘야한다 .

 

위의 그림에서 만약 어노테이션이 없다면 필드명과 키값이 같더라도 인식하지 못한다.  

 

ObjectMapper는 오브젝트의 Getter 메소드 통해 매칭하기  getter 메서드가 있어야하며

getter 메소드외에는 메서드 앞에 'get'을 붙히지 않아야한다  

 

요청에 대한 응답에서도 ObjectMapper가 사용된다 요청의 반대로 요청 데이터에 대한 처리 결과가 담긴 오브젝트를

제이슨으로 리턴하게된다 . 

 

PutRequestDto 리턴

리턴을 할때 Object에서 json으로 형식이 변환된다 이때 json 노드에 접근하여 직접 값을 변경할 수도 있다.

 

user를 제이슨 형식으로 만들고 , objectmapper를 통해 해당 트리를 읽어낸 후 json 노드 (name과 age)에 접근했다.

특정 값을 바꾸고 싶은 경우 맨아래 코드와 같이 jsonNode를 ObjectNode 타입으로 받아 필드에 접근하고 값을 바꿔넣었다.  

반응형