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
'개발자의 정보 > Java & framework' 카테고리의 다른 글
ExecutorService를 이용해 multi thread 활용하기 (Java) (0) | 2020.02.19 |
---|---|
spring framework ResourceHandler를 이용한 외부 디렉토리 파일 다운로드 (0) | 2020.02.16 |
Spring에서 MultipartFile로 파일 저장 / 다운로드 (0) | 2020.02.15 |
Bean의 생성과 소멸에 발생되는 이벤트 (0) | 2020.02.13 |
Simplified sorting in List (0) | 2020.02.12 |
데이터 변경 알림 - @EntityListeners (0) | 2020.02.11 |
자바로 파일 인코딩 확인하기 - Check the file encoding in Java language (1) | 2020.02.01 |
[JSP] forward된 페이지에서 request.getRequestURI 사용하기 (0) | 2020.02.01 |
댓글