사이드 프로젝트를 하다가 Spring에서 Jackson으로 직렬화를 할때 boolean 타입의 필드에 대해서 is가 생략되는 현상을 겪게되었다.
PageInfo 클래스에서 Lombok의 @Getter를 사용했는데 예상과는 다른 결과가 나왔다.
직렬화된 JSON에서 필드명이 isFirst와 isLast가 아닌 first와 last로 출력되는 문제가 발생되는 것이었다.


해당 문제에 대해서 찾아보니 Lombok의 @Getter와 Jackson의 직렬화 방식 간의 상호작용 때문이라는 것을 알게 되었다.
본래 Getter Setter 어노테이션은 사용하면 각 필드에 get, set이 붙어서 메서드가 생성되는데 JavaBean 규약에 따르면 boolean 에 한정하여 is 가 앞에 붙는 것이었다.
즉 getIsFirst가 아닌 isFirst 으로 메서드가 생성되는 것이었다.
위의 롬복 공식문서에서 해당 내용을 확인할 수 있었다.

위와 같이 isFirst() isLast() 로 생성 되었다
Lombok에서 생성된 메서드를 확인하는 방법은 단축키 cmd + 7 (alt + 7)를 이용해서 Structure 탭을 열어서 확인한다.
@JsonProperty 사용
해결하기 위해서 @JsonProperty를 붙여보았는데 더 이상한 현상이 발생되었다.


이 문제를 해결하기 위해 boolean 대신 Wrapper 클래스를 사용하는 방법이 있는데
Lombok은 원시 타입인 boolean 필드에 is 접두사를 붙인 getter를 생성하지만 Boolean 같은 Wrapper 클래스에 대해서는 일반적인 get 메서드를 생성하므로 해결할 수 있다.



Spring에서 Jackson을 사용하여 boolean 필드를 직렬화할 때 예상하지 못한 필드명이 출력되는 문제는 Lombok의 @Getter와 Jackson의 직렬화 방식 간의 상호작용으로 인해 발생했다. 이를 해결하기 위한 방법에는 @JsonProperty와 같은 방법과 boolean 대신 Boolean을 사용하는 것이다. (+ is 접두사가 붙은 변수명 사용X)