연동테스트 도중 알게된 이슈였는데 최초 개발 후 테스트에서는 아무 이슈가 없었는데 조회가 잘되어 모르고 있었는데 다음 연동테스트에서 500 ERROR
가 발생했다.
java.lang.UnsupportedOperationException: null
이 예외는 변경 불가능한(immutable) 컬렉션(리스트, 셋 등)에서 수정 작업을 시도했을 때 발생한다.
데이터베이스에서 조회하여 반환된 Response는 Collections.unmodifiableList() 메서드로 생성된 읽기 전용 리스트에 요소를 추가하거나 삭제하려고 할 때 이 예외가 발생한다.
List<ObjectResponse> responseList = ObjectRepository.findAllByMember(member).stream().map(ObjectResponse::ofOwner).toList();
List<ObjectResponse> appListAnotherJoinList = ObjectRepository.findAllByMemberAsCrew(member).stream()
.map(ObjectResponse::ofCrew)
.sorted(Comparator.comparing(ObjectResponse::getCreatedAt))
.toList();
responseList.addAll(appListAnotherJoinList);
responseList.addAll(appListAnotherJoinList);
에서 null이슈가 발생했다.
responseList로부터 반환된 결과가 변경 불가능한 리스트(immutable list)이기 때문에 발생했다.
해당 메소드 내에서 리스트를 선언 후 두 개의 리스트를 합친다.
List<ObjectResponse> responseList = new ArrayList<>();
responseList.addAll(ObjectRepository.findAllByMember(member).stream().map(ObjectResponse::ofOwner).toList());
ObjectRepository.findAllByMemberAsCrew(member).stream()
.map(ObjectResponse::ofCrew)
.sorted(Comparator.comparing(AppTokenResponse::getCreatedAt))
.forEach(responseList::add);
return responseList;