반응형

환경: springboot 2.5.6, springfox-boot-starter 3.0.0

 

어느 날인가 스웨거를 들어가기만 해도 아래와 같은 에러 로그가 지나가는 것이 관찰되었다.

2022-06-03 11:58:36 WARN  [i.s.m.p.AbstractSerializableParameter   .getExample          : 421] Illegal DefaultValue null for parameter type integer
	java.lang.NumberFormatException: For input string: ""
    	at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
        ...

 

아니 내가 api를 실행시킨 것도 아니고, 스웨거 화면을 새로고침만 했는데 에러 로그라니.. 이건 필히 설정 문제일 것이라는 생각에 참을 수 없었다.

저 에러는 보편적으로 다른 String들이 null을 허용하는데 반해 int는 null을 허용하지 않기 때문에 발생하는데, 스웨거 실행 시 발생하니까 스웨거 관련 설정에서 int를 사용하는 곳이 의심스러웠다.

스웨거에서 api param 세팅해주는 부분을 보았다. 숫자형으로 받는 부분 위주로 보았다.

주로 아래와 같이 @RequestParam으로 직접 받거나 dto를 사용하여 받고 있었다.

@RequestParam(defaultValue = "0") int page
@RequestParam BigInteger seq

public class HoleCardCollectionWeeklyMissionSummaryReq {
    @ApiModelProperty(required = true)
    @NotBlank
    private Integer week;
    ...

 

관련하여 아래 글을 읽고 힌트를 얻은 후 몇 번 이리저리 테스트해본 결과 특정 상황을 포착했다.

  1. BigInteger는 상관없음
  2. @RequestParam(default value = "0") 으로 설정된 int는 상관없음
  3. 필수 값일 경우(@ApiModelProperty(required = true) / @NotBlank) 상관있음

https://soobindeveloper8.tistory.com/444

 

java.lang.NumberFormatException: For input string: ""

@ApiParam( value = "Paging Limit Num", name = "limitNum", type = "int", example = "") @RequestParam (value="limitNum", defaultValue="0")​ java.lang.NumberFormatException: For input string: "" W..

soobindeveloper8.tistory.com

 

즉 필수 값이면서 default value가 설정되지 않은 request param 중 숫자(int)를 스웨거가 보여주려고 하는데, defaultValue도 없고 example도 없어서(null 이어서) 에러가 나는 것이다.

그래서 문제가 된 부분을 찾았고 defaultValue을 주기보다는 스웨거 용 예시(@ApiParam(example))를 추가하여 해결하였다.

public class HoleCardCollectionWeeklyMissionSummaryReq {
    @ApiModelProperty(required = true)
    @ApiParam(example = "1")
    @NotBlank
    private Integer week;
    ...
728x90
반응형

+ Recent posts