[Java/Spring] Jackson 라이브러리

bin·2023년 5월 16일
0

실무에서 Validation 체크를 위해 자주 사용하고 있는 라이브러리인데, 자주 사용되는 어노테이션들은 한 번 정리해두면 추후 필요한 속성을 가져다 쓰기 좋을 것 같아서 정리해보려 한다.

Jackson 라이브러리

자바 진영에서 JSON 데이터를 직렬화 또는 역직렬화 시 많이 사용되는 라이브러리

자바 직렬화란?

객체를 Byte, CSV, JSON, XML 등 통신하기 쉬운 다양한 포맷으로 변환하는 과정

주요 어노테이션

1) @JsonIgnore

주로 비밀번호와 같은 보안상 보여지면 안되는 멤버변수 위에 선언한다. 해당 어노테이션이 선언된 변수는 직렬화/역직렬화 시 제외된다.

public class Member {
	private Long memberId;
    
    @JsonIgnore
    private String pwd; 
}
/* response */
"data": {
	"memberId": 1
}

2) @JsonInclude

값의 존재 유무에 따라 직렬화 시 포함 여부를 설정할 수 있다. 다음 속성들이 존재한다.

ALWAYS 값의 존재 유무와는 상관없이 항상 포함
NOT_EMPTY 값이 NULL 또는 빈 값이 아니면 포함
NOT_NULL 값이 NULL이 아니면 포함
NON_DEFAULT NOT EMPTY + 기본 생성자로 생성된 데이터가 아니면 포함

@JsonInclude(JsonInclude.Include.NON_NULL)
public class Member {
	private Long memberId;
    private Long money;
}

3) @JsonProperty

직렬화 시 사용할 이름을 설정할 수 있다. 즉, 매핑 시 DB 컬럼명과 VO 필드명이 상이할 경우 사용된다.

public class Member {
	@JsonProperty("id") // memberId 대신 id로 받기
	private Long memberId;
    
    @JsonProperty("name") // memberName 대신 name으로 받기
	private String memberName;
}
/* response */
"data": {
	"id": 1,
  	"name": "James"
}

또한, 아래와 같이 access 속성으로 접근을 제어할 수 있다. 나의 경우, 백단에서만 처리되는 데이터들은 모두 WRITE_ONLY 속성을 주어 응답 본문에서 제외되도록 하였고, 요청 시에는 없지만 백단에서 생성되어 프론트로 전달되는 데이터들은 모두 READ_ONLY 속성을 주었다.

WRITE_ONLY

  • 요청 본문을 처리할 때만 사용되고, 응답결과를 생성할 때는 해당 필드가 제외되어 응답 본문에 표시되지 않음

READ_ONLY

  • 요청 시 해당 필드가 제외되어 요청 본문에 표시되지 않음
public class Member {
	private Long memberId;
    
    // 조회수는 백단에서 SELECT하여 프론트로 보내지므로 요청본문에 포함되지 않도록 함
    @JsonProperty(access = JsonProperty.Access.READ_ONLY)
    private Long views;
}
/* request */
{
	"memberId": 1
}

JACKSON 라이브러리는 이러한 어노테이션들 이외에도 다양한 어노테이션 및 기능을 제공하고 있다. 필요에 따라 적절히 사용한다면 JSON 데이터의 Validation을 처리하는 데 많은 도움이 될 것이다.

0개의 댓글