-
[Swagger] NullPointerException 잡기스터디 & 프로젝트/Init Cloud 팀 프로젝트 2023. 2. 23. 00:43
오류 발생
java.lang.NullPointerException: null at springfox.documentation.builders.ParameterMerger.lambda$mergedParameters$2(ParameterMerger.java:87) ~[springfox-core-3.0.0.jar!/:3.0.0] at java.base/java.util.stream.ReferencePipeline$2$1.accept(Unknown Source) ~[na:na] at java.base/java.util.ArrayList$ArrayListSpliterator.tryAdvance(Unknown Source) ~[na:na]
스프링 부트 프로젝트를 빌드하고 실행하니 앱 런타임 시점에서 NPE가 발생했다.
발생 위치는
springfox.documentation.builders.ParameterMerger
내부의 87번 라인이다.
원인
class ParameterMerger { ... private List<springfox.documentation.service.Parameter> mergedParameters( Set<String> paramsToMerge, List<springfox.documentation.service.Parameter> existingParameters, List<springfox.documentation.service.Parameter> newParams) { List<springfox.documentation.service.Parameter> parameters = new ArrayList<>(); for (springfox.documentation.service.Parameter newParam : newParams) { Optional<springfox.documentation.service.Parameter> original = existingParameters.stream() /* 이 라인에서 발생 */ .filter(input -> newParam.getName().equals(input.getName())).findFirst(); if (paramsToMerge.contains(newParam.getName()) && original.isPresent()) { if (newParam.getOrder() > original.get().getOrder()) { parameters.add(merged(newParam, original.get())); } else { parameters.add(merged(original.get(), newParam)); } } } return parameters; } ... }
.filter(input -> newParam.getName().equals(input.getName()))
위 코드에서 보면
filter
메소드 내부의 람다 식에서 NPE가 발생하는 것을 확인할 수 있다.public class Parameter implements Ordered { private final String name; private final String description; ... }
newParam.getName()
또는input.getName()
에서 NULL 값을 반환하면서Optional<>
이 예외처리한 것인데...해당 객체의 프로퍼티에는
name
이 존재한다.이 값을 찾지 못해서 NPE가 발생한다고 생각했다.
해결
@ApiImplicitParam(name = "__name__", paramType = "path", value = "__value__", required = true, dataTypeClass = String.class, example = "__example__")
즉, 필수 요소인
name
프로퍼티가 빠진 곳이 있는지를 확인했다.딱 하나가
name
이 없어져 있더라.'스터디 & 프로젝트 > Init Cloud 팀 프로젝트' 카테고리의 다른 글
[Spring Boot] 어떻게 DTO를 재구성할까? (0) 2023.03.20 [MariaDB] 인덱스로 성능 향상 체감하기 (0) 2023.03.03 [Azure] Spring Boot 프로젝트를 App Service에 배포하기 (0) 2023.02.15 [Spring Boot] Github OAuth 적용하기 (0) 2023.01.31