본문 바로가기
개발자의 정보/Java & framework

Java에서 Jackson 사용중 JSON data에 특정 field 제외 하거나 포함하기

by pastory 2020. 2. 13.

Jackson 라이브러리는 매우 편리합니다. 오브젝트를 JSON 형태로 바꾸거나 반대로 JSON을 오브젝트 형태로 바꿀때 아주 유용하죠. 자동으로 모든 항목을 바꿔 주니까 참 좋은데 가끔 패스워드 처럼 같은 특정 항목은 사용자의 입력을 서버에서 받아 처리하지만 사용자에게 내려 보내주면 안되는 경우가 있습니다.

 

이럴때는 Jackson annotation 기능을 활용하면 매우 쉽게 들어오는 JSON 데이터를 받을 때는 사용하고 내보낼 때는 사용하지 않도록 설정할 수가 있습니다. 물론 그 반대도 마찬가지 입니다.

 

Java는 오브젝트의 접근 권한 관리와 데이터의 신뢰도를 매우 중요하게 생각하기 때문에 값을 넣을 때는 setter 메소드를 활용하도록 권장하고 받을 때는 getter 메소드를 사용하도록 권장하고 있습니다. 그리고 대부분의 라이브러리도 그 기준에 맞추어 설계되어 있죠. 그래서 그 기준에 맞추어 setter 메소드와 getter 메소드에 적절한 annotation을 설정해 주면 됩니다.

 

  • 사용할 메소드: @JsonProperty
  • 사용하지 않을 메소드: @JsonIgnore

만일 lombok 라이브러리를 사용하고 계신다면 변수에 @JsonIgnore annotation을 사용하면 serialize deserialize 양쪽을 모두 사용할 수 없게 되니까 이것도 쉽게 적용할 수 있겠죠.

 

예를 들어 보겠습니다.

 

사용자의 정보를 update 하거나 내려주는 api를 제작했다고 하지요. 그럼 사용자 정보를 업데이트 혹은 인서트 하기 위해서 우리는 password 항목을 받아야 합니다. 하지만 사용자 정보를 내려 줄 때는 요청자가 본인이 아닌 경우도 있기 때문에 password 항목을 보내줘서는 안됩니다. 이럴때 JSON 으로 치환되는 오브젝트를 이렇게 만들면 됩니다.

@Data //lombok
public class AppUser {
    private Long id;
    private String username;

    @JsonIgnore
    private String password;

    @JsonProperty
    public void setPassword(String password) {
        this.password = password;
    }
    ...
}

 

이 외에도 Jackson annotation에는 여러가지 좋은 기능이 많이 있는데요, 시간 되실 때 쭈욱 한번 알아 두시면 좋을 것 같습니다. 관련 정보를 확인하는 웹 페이지를 링크해 두겠습니다.

 

https://www.baeldung.com/jackson-annotations

 

Jackson Annotation Examples | Baeldung

The core of Jackson is basically a set of annotations - make sure you understand these well.

www.baeldung.com

 

댓글