[Swagger] Unable to interpret the implicit parameter configuration with dataType

김유정·2022년 8월 4일
2

Java(11) + Spring(2.5.0) + MySQL(8.0.29) + MyBatis와 같은 조합으로 프로젝트를 개발하였고, Swagger를 적용하기 위해 Spring fox 3.0.0을 사용했다.

문제 발생 상황


Swagger로 api 문서를 정리하고 있었는데, 다음과 같은 에러가 발생했다.

Unable to interpret the implicit parameter configuration with dataType: , dataTypeClass: class java.lang.Void
  • 캡쳐 화면

문제 발생 원인


이 문제에 대해 딱히 잘 정리해놓은 글은 없어서, 어려운 문제는 아닌데 시간을 좀 썼다.

이건 Swagger에서 @ApiImplicitParam 어노테이션을 쓸 때 발생할 수 있는 문제이다.

저 에러 발생 로그를 번역하면, java.lang.Voidimplicit parameter를 해석할 수 없다는 뜻이다.

왜 이런 문제가 발생하는 것일까? 나는 java.lang.Void로 해석하라고 한 적도 없는데.

@ApiImplicitParam 에 정확한 dataTypeClass 를 명시하지 않았기 때문이다.

ApiImplicitParam interface 파일에서는 dataTypeClass를 아래와 같이 정의해놓았다.

    /**
     * The class of the parameter.
     * <p>
     * Overrides dataType if provided.
     */
    Class<?> dataTypeClass() default Void.class;

중요한 사실은 2가지이다.

  • dataTypeClass는 디폴트값이 Void.class이다.
  • 이 값이 주어진다면, dataType값을 재정의한다.

요약

현재 dataTypeClass에 아무런 값도 정의하지 않아서, 디폴트값인 Void.class로 설정된 것인데, 실제로 들어오는 값은 Integer이기 때문에 문제가 발생한다.

문제 해결


dataTypeClass에 올바른 값을 넘겨주면 된다. 그래서 아래와 같이 수정했다. 파라미터의 클래스를 설정하는 것이기 때문에, Integer.class, String.class 이런식으로 적어주면 된다.

  • 수정 전
@ApiImplicitParam(name = "id", value = "유저 아이디(고유 식별 번호)", required = true)
  • 수정 후
@ApiImplicitParam(name = "id", value = "유저 아이디(고유 식별 번호)", required = true, dataTypeClass = Integer.class)

참고

0개의 댓글