오늘 옆 동료분이 restful 관련 json 변환시 boolean에 속성의 한 필드가 이럴경우 저럴경우 오류가 생기고 안생긴다고 한다.
대충 보니 이름 문제같은 느낌적인 느낌이 들고, 마침 다른 동료도 해당 이슈에 대해 처리했던 경험을 얘기해 줘서 한번 보기로 함.
자 lombok의 @Data 로 생성된 boolean 을 보자.
property를 isResult로 했지만 Lombok에 의해 생성된 메소드는 isResult, setResult이다.
그럼 그냥 result로 한다면?... 똑같다.
흠.. 이상도 하지.. 그럼 Boolean 타입이라면?
어어... get/set이 is앞에 붙어버린다. is가 없는 경우도 당연히~
즉, @Data를 쓸경우 의도와는 다르게 처리될 수 있기 때문에 꼭 네이밍을 확실히 정해야 한다.
RestController를 통해 기본형 boolean이 json으로 변환될 경우 아래 json처럼 되기 때문에 받는 오브젝트에서는 변환이 안되고 기본값 false가 될 수 있다.
{
isSoldout : true
}
ObjectMapper의 처리 방식도 염두해둬야 한다.
받는 쪽 Object에 @Data를 넣고 속성명을 isResult로 하면 json이 'isResult : true' 이든 'result : true' 문제가 없다.
----
@Data
public class ...{
private boolean isResult;
----
하지만 'result' 로 하면 넘어오는 값은 true이지만 매핑이 되지않아 기본값 false로 지정되어 버린다.
----
@Data
public class ...{
private boolean result;
----
이게 한번 격고나면 문제와 원인, 처리방법이 자연스럽게 몸에 배어 있게 되는데(그러다 원인과 이유를 까먹음..), lombok 사용을 새롭게 하시는 분들은 한번씩 격는 문제이지 싶다.
결론
- @Data 사용시 boolean에 대해 한번 더 생각해보기.
- @Data 를 사용하여 기본형 boolean을 받을 경우, 아래와 같이 @JsonProperty로 json의 속성명을 직접 지정해준다.
@JsonProperty("isResult")
private boolean result;
- boolean 을 Boolean으로.
- 뭐 여러가지.