배달 스토어를 등록 테스트를 진행하는 과정에서 파라미터를 보냈지만 Null 값으로 들어가는 현상이 발생하여, 등록이 되지 않는 것을 알게 되었다.
실제로 요청을 아래와 같이 요청을 보내면 Request Body 에는 전달이 되고 있다는 것을 Filter Log 를 통해서 알 수 있다.
그렇다면 문제가 되는 부분이라고 들 수 있는 것은 Controller 에 파라미터를 변환하는 과정에서 문제가 발생하는 것으로 보인다. 즉, MessageConverter 에서 어려움이 발생하고 있는 듯 하다.
현재 시스템에서는 JSON 형식을 객체의 타입으로 변환하는 과정을 진행하고 있기 때문에 Jackson2 Converter 를 파고 들면 될거 같다. 디버깅을 통해서 문제가 되는 부분을 하나씩 파고 들어가보자.
하나씩 디버깅을 하다 보면 객체 파라미터를 역직렬화 하는 과정에서 파라미터를 찾을 수 없어서 진행되는 handleUnkonwProperty 를 찾아가게 되는 것을 볼 수 있다.
파싱을 하는 과정에서 매칭이 되는 프로퍼티 정보를 찾지 못하는 경우 나타내는데 왜 매칭하지 못할까?
현재 매핑 할 객체의 정보를 보니 매핑 정보가 스네이크 케이스로 바라보고 있다. 잘 보면 Swagger 를 통해서 파라미터를 전달할때 카멜 케이스로 처리 되는 것을 볼 수 있다.
여기서 보면 분명 **storeCategory [카멜 케이스]로 전달하고 있고, 실제로 JSON 형식을 받으면 store_category [스네이크 케이스]**를 받을 거라고 생각하고 있다.
왜 이런 이슈가 발생했을까?
Swagger 에서 보여주는 Naming 을 Snake Case 로 설정해주면 된다.
Swagger ModelResolver 를 재정의 해주면 된다. 이때, ObjectMapper 를 단순히 넣어주고 있는데 이러할 수 있는 이유는 ObjectMapper 도 재정의해서 사용하고 있으며, 재정의한 내용안에 Naming 을 Snake Case 로 설정되어 있기 때문이다.
결과적으로 Swagger 의 Naming 도 Snake Case 가 적용된 것을 볼 수 있다.