본문 바로가기
Spring

@JsonIgnore 사용시 발생한 문제점과 @JsonProperty를 이용한 해결 방법 정리

by devLog by Ronnie's 2022. 6. 29.

들어가며


이번 글을 제목에 나와 있는 그대로 @JsonIgnore 사용시 발생한 문제점과 @JsonProperty를 이용한 해결 방법 정리를 해보려고 한다.

상황은 이러했다.

 

Response dto 객체를 만들던 도중 하나의 필드가 프론트쪽 응답에는 전달되면 안되고 로직 내에서는 사용이 되어야하는 케이스가 발생하였다. 기존에 알고 있던 @JsonIgnore 어노테이션을 통해 해결을 하려고 했는데 문제가 생겼다. 이때 발생한 문제점과 해결방안에 대해 정리한다.

 

문제


이러한 문제는 dto와 domain 객체 간의 JSON 직렬화 또는 역직렬화 상황에서 특정 필드만을 제외하고 싶은 경우에서 @JsonIgnore를 사용하게 되면 해당 필드는 제외가 되긴한다. 

 

하지만 내가 원하는 상황은 응답으로만 전달되지 않고 로직내에서는 연산이 되어야하는 것인데 @JsonIgnore를 사용하여 해당 값을 null로 인식하게 된다.

 

예를들어 해당 필드가 어떠한 엔티티에 아이디 값이라고 가정을 하자. 프론트쪽에서는 해당 아이디 값을 알 필요가 없어 전달은 원치 않지만 백단에서는 해당 respnose dto 안에 id 값을 받아와 해당 id 값으로 정보를 얻어야하는 경우에는 위에서 말했듯이 JsonIgnore를 사용하면 안된다는 것이다.

 

자세히 보기 위해 debug 해보자.

 

@JsonIgnore를 사용한 필드값에 널 값을 testest로 지정하고

확인을 해보면 다음과 같이 찍히는 것을 확인할 수 있다.

마찬가지로 null로 설정하면 null로 나온다

 

해결방법


이러한 경우에 @JsonProperty 를 사용하여 옵션 값으로 access를 설정해주면 된다.

접근제어 방식을 설정해주는 것인데 설정 값으로는 AUTO / READ_ONLY / WRITE_ONLY / READ_WRITE 가 존재한다.

해당 상황에서는 아래와 같이 WRITE_ONLY 명시하게 되면 연산은 가능하며 json 객체에서는 보이지 않게 된다.

댓글