반응형
환경: 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;
...
관련하여 아래 글을 읽고 힌트를 얻은 후 몇 번 이리저리 테스트해본 결과 특정 상황을 포착했다.
- BigInteger는 상관없음
- @RequestParam(default value = "0") 으로 설정된 int는 상관없음
- 필수 값일 경우(@ApiModelProperty(required = true) / @NotBlank) 상관있음
https://soobindeveloper8.tistory.com/444
즉 필수 값이면서 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
반응형
'개발 > spring' 카테고리의 다른 글
[liquibase] springboot과 연동가능 한 db형상관리 툴 (0) | 2022.07.07 |
---|---|
[websocket] REST-http vs websocket (0) | 2022.06.10 |
[scheduled] @Schueduled와 캐시 (0) | 2022.05.30 |
[spring-cache] 스프링 캐시 ehcache (0) | 2022.05.30 |
[spring-jpa] 부모-자식 트랜젝션 관계(propagation) (0) | 2022.05.27 |