[ T I L ] 2024.02.23

오세창·2024년 2월 24일

TIL

목록 보기
1/18

문제

회원가입 로직을 구현하고, postman 으로 테스트 하던 중 boolean 값이 전달되지 않는 문제가 발생하였다

SignuprequestDto.java

위와 같이 상태값을 받는 필드는 isOwner 로 명명했으며, 기본값으로는 false = 고객 / true 를 받을 때는 사장님으로 가입할 수 있도록 했다.

UserService.java

ROLE 확인 로직을 서비스 로직 내에 구현했다.

PostMan Test

오탈자 없이 필드값을 명시해주었으며, 정확히 boolean 값을 입력하였다.

Database

하지만 해달 값은 반영되지 않고, false 의 값으로 CUSTOMER 가 삽입된 것을 확인할 수 있었다.

시도 (1)

우선 해당 값이 어디서부터 false 로 찍혀오는지 확인을 해봤다.

UserController.java

UserService.java

boolean 값을 프린트로 찍어봤다.

결과

그냥 controller 에도 false 로 찍힌 거 보니 그냥 처음부터 boolean 값을 전달받지 못한 거 같다고 생각하였다.

시도 (2)

SignuoRequestDto.java

이번에는 래퍼 클래스로 감싸보았다.

결과

이번에는 true 로 정상적으로 받아오는 것을 확인할 수 있었다.

Database

DB 에도 정상적으로 적용되는 것을 확인할 수 있었다.

이렇게 해결할 수 있겠지만, 애초에 역할부여 기능은 null 값을 허용하지 않고 (정확히 말해서는 필요가 없다)
평상시에는 false 로 유지하다가, 특정 경우에만 true 를 전달하여 사장님으로 가입시키는 게 목적이었다.

그래서 래퍼클래스를 사용하기에는 다소 불필요 하다고 생각했다.
이에 기본 자료타입만으로 요구조건을 만족시킬 수 있도록 방법을 강구했다.

해결

StackOverFlow

https://stackoverflow.com/questions/21913955/json-post-request-for-boolean-field-sends-false-by-default

해당 사이트에서 해결방법을 알아냈다.

내용을 살펴보니 lombok 어노테이션을 사용할 경우 boolean 필드명으로 "is" 를 쓰지 않는다고 한다.
이것인 jackson 의 java been 네이밍 컨벤션이라고 한다.

SignUpRequestDto.java

위 내용에 근거하여 필드명을 수정하였다.
"is" 없이 owner 로 변경하기에는 그 목적이 뚜렷하게 드러나지 않는다고 생각하여 "registerAsOwner" 로 수정하였다.

DataBase

test6 의 역할이 OWNER 로 삽입된 것을 확인할 수 있었다 !

알게된 점

lombok 사용시 boolean 필드명에는 "is" 키워드가 들어가지 않으며, 이를 유의하여 필드명을 정의해야겠다 !

0개의 댓글