Spring MVC/04.Rest

[swagger]Illegal DefaultValue null for parameter type integer

  • -

Swagger를 사용하다 보면 가끔 전혀 생각지 못했던 곳에서 오류가 나오곤 한다.  오늘은 이런 오류에 대해서 살펴보자.

[06-27 16:27:39] [ 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:67)
	at java.base/java.lang.Long.parseLong(Long.java:721)
	at java.base/java.lang.Long.valueOf(Long.java:1163)
	at io.swagger.models.parameters.AbstractSerializableParameter.getExample(AbstractSerializableParameter.java:412)
    . . .

위 오류(정확히는 warn)가 발생하더라도 프로그램은 잘 동작하니까 그다지 심각한 내용은 아니지만  상당히 긴 trace 내용이 신경이 거슬르게 한다.

문제의 출발점은 io.swagger.models.parameters.AbstractSerializableParameter.getExample에서 발생했는데 당연히 내 코드에서는 해당 메서드를 "직접" 사용한 적은 없었다.

어디서 간접적으로 사용된 곳이 있을텐데..

 

문제를 일으킨 코드

문제는 아래의 코드에서 발생했다.

@ApiModelProperty(value = "페이지 번호(0..N)")
private Integer page;

 

ApiModelProperty

example이라는 것은 swagger api가 작성될 때 사용하는 속성의 기본 값이다. 만약 속성의 타입이 Integer이고 example에 별도의 할당이 없는 경우 ""을 Integer로 변경할 수 없어서 발생하는 오류이다.

@Target({ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface ApiModelProperty {

    /**
     * A sample value for the property.
     */
    String example() default "";

}

ApiModelProperty 뿐 아니라 @ApiParam 등에서도 동일한 문제가 발생할 수 있으므로 오류 상황을 기억했다가 써먹어볼 수 있겠다.

 

코드 수정

이제 문제의 코드에 example 값을 숫자형으로 넘겨주면 해결이다.

@ApiModelProperty(value = "페이지 번호(0..N)", example = "0")
private Integer page;

 

'Spring MVC > 04.Rest' 카테고리의 다른 글

[Spring] Update 시 Put vs Patch  (0) 2022.06.29
[spring]@ModelAttribute vs @RequestBody  (2) 2022.05.12
[Swagger] Pageable 객체 처리  (0) 2022.05.05
[swagger]swagger와 interceptor  (0) 2021.12.09
[springboot]CORS 설정  (0) 2021.09.08
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.