문제

https://github.com/OPGG-HACKTHON/MusicWard-Server/issues/162

spotify에서 아무 데이터도 조회되지 않는 경우 비어있는 list에 index 접근을 시도하기 때문에 IndexOutOfBoundsException을 던진다.

Untitled

해결

기존 코드

public NonPlaylistsResponse toNonPlaylists() {
        List<NonPlaylistsResponse.Playlist> nonPlaylists = new ArrayList<>();

        for (Item item : items) {

            Item.Image originalImage = item.images.get(0);
            NonPlaylistsResponse.Playlist.Image image = NonPlaylistsResponse.Playlist.Image
                    .builder()
                    .url(originalImage.getUrl())
                    .width(originalImage.getWidth())
                    .height(originalImage.getHeight())
                    .build();

            NonPlaylistsResponse.Playlist nonPlaylist = NonPlaylistsResponse.Playlist.builder()
                    .originalId(item.getId())
                    .originalTitle(item.getName())
                    .originalDescription(item.getDescription())
                    .image(image)
                    .externalUrl(item.getExternal_urls().getSpotify())
                    .build();

            nonPlaylists.add(nonPlaylist);
        }

        return NonPlaylistsResponse.builder()
                .provider(Provider.SPOTIFY)
                .items(nonPlaylists)
                .build();
    }

Item.Image originalImage = item.images.get(0)에 접근하면서 발생

개선 코드

public NonPlaylistsResponse toNonPlaylists() {
        List<NonPlaylistsResponse.Playlist> nonPlaylists = new ArrayList<>();

        for (Item item : items) {
            if (item != null && !item.images.isEmpty()) {
                Item.Image originalImage = item.images.get(0);
                NonPlaylistsResponse.Playlist.Image image = NonPlaylistsResponse.Playlist.Image
                        .builder()
                        .url(originalImage.getUrl())
                        .width(originalImage.getWidth())
                        .height(originalImage.getHeight())
                        .build();

                NonPlaylistsResponse.Playlist nonPlaylist = NonPlaylistsResponse.Playlist.builder()
                        .originalId(item.getId())
                        .originalTitle(item.getName())
                        .originalDescription(item.getDescription())
                        .image(image)
                        .externalUrl(item.getExternal_urls().getSpotify())
                        .build();

                nonPlaylists.add(nonPlaylist);
            }
        }

        return NonPlaylistsResponse.builder()
                .provider(Provider.SPOTIFY)
                .items(nonPlaylists)
                .build();
    }

추가적인 if 검증을 통하여 개선