Swagger에서 특정 프로퍼티가 나타나지 않는 문제

effiRin·2023년 2월 19일
0
post-thumbnail

문제

Response에서 isMonopoly 라는 프로퍼티를 만들었다.
그런데 swagger 테스트할 때 model schema에 안 뜨고, 당연히 값도 안 넘어옴.
다른 프로퍼티명은 잘 뜨고 값도 잘 넘어오는데 얘만 안 뜬다.

인텔리제이에서 디버깅 해봤는데 DB 잘 타고, 로직 잘 타고
마지막 Response 객체에 너무 예쁘게 잘 담겨있음.
결국 swagger의 문제란 이야기!!!


원인 추정

검색해 보니까 특정 프로퍼티명을 스웨거가 인식 못 하는 경우가 있는 것 같았다.

  1. 스웨거가 내부적으로 사용하고 있는 프로퍼티명이거나...
    Swagger를 이용한 API 문서 자동화

    Mapping 되는 Json Data에 'properties' 라는 필드가 존재하면
    Swagger에서 'properties'라는 필드가 Mapping 되지 않고 Model Schema에 표현되지 않는 이슈가 발생한다. Swagger에서 이미 'properties' 라는 이름을 사용하고 있기 때문이다.

  1. CamelCase로 프로퍼티명 작성했을 때
    Swagger 1.2 필드가 안 보일 때

    프로퍼티명이 소문자 한글자 뒤에 대문자로 camelize된 경우 Swagger 내부의 CodeGen 과정에서 문제를 일으켜 누락되는 것이다.



삽질하기

위의 글을 보고 isMonopoly 라는 프로퍼티명을 이것저것 바꿔서 테스트하기 시작

(1) isMonopoly → 인식 못 함
(2) isExclusive → 인식 못 함
(3) isExistAlias → 인식함;;;;;;;
(4) issMonopoly → 인식함
(5) monopoly → 인식함


isMonopoly가 swagger 내부에서 쓰는 프로퍼티명인가? 싶어서
isExclusive 로 바꿔봤다. 안 된다.
열심히 구글링하고 공식 문서 찾아봤는데 swagger에서 isMonopoly를 내부적으로 쓰는지는 찾지 못 했다.

그래서 issMonopoly로 바꿔봤는데 이건 인식한다.

2번처럼 앞에 소문자로 is 두 글자 들어가고 뒤에 camelize 되어서 문제인가? 했다.
그런데 isExistAlias로 바꿔보니 잘 인식한다;

결국 is 뒤에 camelize로 대문자 붙여주는 게 문제인 것으로 보이는데
연달아 두 개 붙여주면 또 인식이 가능한 건가???
도대체 무슨 기준인지..?

난 도무지 스웨거를 이해할 수 없다.



해결 방법

@JsonProperty vs @JsonAlias in Jackson
Jackson 라이브러리 기본기능 정리 - json 직렬화와 역직렬화

찾아보니까 @JsonAlias 어노테이션을 써서 프로퍼티명을 여러 개 주어서 스웨거에서 인식하게 하는 방법이 있었지만

나는 통일감 있게 DB 컬럼명부터 response 프로퍼티명까지 동일하게 쓰고 싶었다.
그래서 결국 monopoly로 바꾸었다.

명확한 원인이 무엇인지 못 밝혀내서 아쉽다.
스웨거의 매핑이 어떻게 이루어지는지 그걸 알아봐야 원인이 무엇인지 명확히 알 것 같다.
하지만 추후에.................................... 시간이 날 때 한번 파고 들어보는 걸로....


profile
모종삽에서 포크레인까지

0개의 댓글