천천히, 열정적으로
RESTapi 테스트 중 boolean 값이 false로 보내지는 경우 본문
엔티티에 isDajim이라는 필드가 있었다.
@Getter
public class Report {
private boolean isDajim;
}
다짐인지 아닌지를 true, false로 알려주는 필드인데 이상하게 다른 필드는 getter로 값을 얻을 때 report.getXXX() 로 얻어졌지만 isDajim 필드는 report.isDajim() 으로 완성이 되었다. (롬복이 getter 이름을 isDajim 그대로 놔둔 것 같다.)
이상하다고 생각하면서 postman 테스트를 돌려보니 값은 전달이 됐지만 isDajim의 값을 true로 전달했음에도 false로 바뀌어 전달이 됐다.
DB에는 0으로 저장이 되길래1로 다시 값을 보내보니 postman에는 여전히 false, DB 역시 여전히 0으로 저장된다.
검색 해 보니 json을 object로 변환해주는 라이브러리인 jackson 때문에 이런 결과가 나온 것이었다.
jackson은 getter과 setter에 따라 알아서 속성값을 결정하는데 isDajim은 getXXX 형식으로 바뀌는게 아니라 isDajim 그대로 사용되기 때문에 인식을 못 했던 것이다.
그래서 isDajim 필드만 따로 getter를 명시해 주었다.
public boolean getIsDajim() {
return isDajim;
}
또는
@JsonProperty
private boolean isDajim;
이렇게 사용해도 된다는데 이건 테스트 해보지 못했다.
결론.
lombok과 같은 라이브러리를 사용하여 getter 및 setter를 생성할 때 필드 타입이 boolean인 경우 필드 이름에 왠만하면 'is'를 추가하지말자.
Jackson이 자바 빈 규약에 따라 필드를 세팅할 때 'is'를 추가하기 때문이다.
'is'를 넣으면 필드 매핑이 잘못된다.
'혼자 공부하는✍ > 오류와의 싸움❌' 카테고리의 다른 글
MessageSource 사용 시 ??(물음표로 나오는)오류 (0) | 2023.05.01 |
---|---|
[JPA] ddl-auto: create로 테이블 생성 중 오류 (0) | 2023.04.06 |
Cannot delete or update a parent row: a foreign key constraint fails 해결 (0) | 2022.12.26 |
롬복 갑자기! 인식 안 되는 문제 (0) | 2022.11.14 |
application.yml 과 mysql 연동 오류 (1) | 2022.11.11 |