Jackson 어노테이션 : com.fasterxml.jackson.annotation
。@ResponseBody를 통해 Controller에서 반환되는 DTO 객체를 JSON Format으로 직렬화 시 JSON에 포함될 객체 Field에 대해 정의
▶ @JsonProperty , @JsonIgnore , @JsonInclude , ...
@JsonProperty("JSON키이름") :
。POJO의 특정 Field에 선언하여 직렬화 시 JSON의 mapping된 key의 이름을 지정하는 어노테이션
。POJO의 field에 @JsonProperty("JSON키이름")을 선언 시 직렬화를 수행할 때 해당 field에 해당하는 JSON의 key명을 임의로 설정
@JsonIgnore
。POJO와 JSON 간 직렬화 시 특정 field를 제외하는 용도로 객체의 특정 field에 선언하는 어노테이션
▶ 특정 객체를 Response하는 경우 JSON Data에서 해당 어노테이션을 선언한 객체 Field를 Response에서 제외.
@JsonInclude
。객체를 JSON으로 직렬화 시 어떤 field를 포함할 지 설정하는 용도의 어노테이션
。메서드레벨 / 클래스레벨에서 선언 가능
▶ 클래스레벨인 경우 해당 클래스 내 모든 Field에 대해 일괄적으로 적용
@JsonInclude(JsonInclude.Include.NON_NULL)
。객체에서 선언된 field의 값이 null인 경우 해당 field는 제외
Controller에서 다음처럼 선언된 객체를 반환하는 경우
@Getter
@AllArgsConstructor
public class ApiResult<T> {
@JsonProperty("statuscode")
private String code;
@JsonIgnore
private String message;
@JsonInclude(JsonInclude.Include.NON_NULL)
private T data;
public static ApiResult<Void> ok(){
return ApiResult.of("ok","성공",null);
}
public static <T> ApiResult<T> ok(T data){
return ApiResult.of("ok","성공",data);
}
public static <T> ApiResult<T> of(String code, String message, T data){
return new ApiResult<>(code,message,data);
}
}

。@JsonProperty("statuscode") 가 선언된 field는 JSON에서 statuscode라는 key로 출력
。@JsonIgnore가 선언된 field는 JSON에서 제외
。@JsonInclude(JsonInclude.Include.NON_NULL)가 선언된 field는 해당 데이터가 null이 아니므로 JSON에 포함