클라이언트 request를 통해 전달된 json 데이터를
Spring의 Object Mapper가 컨트롤러에 정의해놓은
파라미터 중 매칭되는 것을 찾아 Json 값을 Object의 필드와 비교해 바인딩 해준다.
이때 json데이터의 키값과 오브젝트 필드명이 일치해야 하는데
json 데이터의 키값은 snake case를 주로 사용하고
java 오브젝트 필드명은 camel case를 사용해여 불일치가 일어난다.
이럴경우 해당 오브젝트 필드에
@JsonProperties를 통해 특정 필드에 json 키값을 지정할 수 있다.
만약 오브젝트 클래스 전체에 대하여 형식지정을 원한다면
해당 클래스에 @JsonNaming을 붙히면된다
위 의 클래스의 경우 List<Car> 타입의 필드를 가지고 있는데 , 위 클래스처럼 JsonNaming 을 한다고 Car 객체에까지 영향을 주는 것은 아니기 때문에 Car 객체에도 알맞게 설정해 줘야한다.
예를 들어 간혹가다 json 의 키값이 "OTP" 라면 필드명과 json 키 값이 같더라도
카멜케이스 혹은 스네이크 케이스가 둘다 해당되지 않기 떄문에 @JsonProperties 를 통해 지정해 줘야한다 .
위의 그림에서 만약 어노테이션이 없다면 필드명과 키값이 같더라도 인식하지 못한다.
ObjectMapper는 오브젝트의 Getter 메소드 통해 매칭하기 getter 메서드가 있어야하며
getter 메소드외에는 메서드 앞에 'get'을 붙히지 않아야한다
요청에 대한 응답에서도 ObjectMapper가 사용된다 요청의 반대로 요청 데이터에 대한 처리 결과가 담긴 오브젝트를
제이슨으로 리턴하게된다 .
리턴을 할때 Object에서 json으로 형식이 변환된다 이때 json 노드에 접근하여 직접 값을 변경할 수도 있다.
user를 제이슨 형식으로 만들고 , objectmapper를 통해 해당 트리를 읽어낸 후 json 노드 (name과 age)에 접근했다.
특정 값을 바꾸고 싶은 경우 맨아래 코드와 같이 jsonNode를 ObjectNode 타입으로 받아 필드에 접근하고 값을 바꿔넣었다.
'SPRING BOOT' 카테고리의 다른 글
Spring boot 공부 3 - 예외 처리 ControllerAdvice와 @ExceptionHandler (0) | 2021.05.20 |
---|---|
Spring boot 공부 2 - validation 과 custom validation 만들기 (0) | 2021.05.20 |
Spring boot Lombok 사용을 위한 셋팅 (0) | 2020.11.19 |
Spring boot application.yml 설정 (0) | 2020.11.05 |
H2 DATABASE 설치 (개발용 DB) 및 설정 (0) | 2020.11.04 |