Olá, estou fazendo o desafio: Catálogo de Livros, e é um dos requisitos que todos os livros consultados serem salvos no banco de dados, porém todos os títulos de livro que eu testo para a API buscar que contenham acentos ou ''ç'' (Como O Cortiço) ela simplesmente não retorna resultado algum, mesmo esse livro constando na API... Como resolver esse impasse? Em meu código já tentei muitas coisas, mas nada está dando certo, Já mudei a configuração da IntelliJ incluindo: -Dfile.encoding=UTF-8 e também não deu certo. Abaixo está o código do local onde acho que precisará de novas configurações.
obs: não há problemas em digitar títulos com letras maiúsculas e minúsculas
Tenho verificado e meu código parece traz uma URL com problema (para o livro O Cortiço) : https://gutendex.com/books?search=o+cortico
Aqui tenho uma URL que funciona (para o livro O Cortiço): https://gutendex.com/books/?search=o+cortiço
Elas são diferentes... /books/?
Abaixo parte do meu código:
package br.com.sheila.bookcatalog.client;
import br.com.sheila.bookcatalog.dto.BookDTO;
import br.com.sheila.bookcatalog.dto.GutendexResponse;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.text.Normalizer;
@Service
public class GutendexClient {
    private final RestTemplate restTemplate = new RestTemplate();
    public BookDTO buscarLivroPorTitulo(String tituloOriginal) {
        //Normaliza o título 
        String tituloParaBusca = Normalizer.normalize(tituloOriginal, Normalizer.Form.NFD)
                .replaceAll("\\p{M}", "")
                .toLowerCase();
        //Codifica a URL com o título normalizado
        String url = "https://gutendex.com/books?search=" + URLEncoder.encode(tituloParaBusca, StandardCharsets.UTF_8);
        ResponseEntity<GutendexResponse> resposta = restTemplate.getForEntity(url, GutendexResponse.class);
        GutendexResponse body = resposta.getBody();
        if (body != null && body.results() != null && !body.results().isEmpty()) {
            // A comparação adicional ainda é útil para refinar os resultados localmente
            // caso a API retorne algo próximo, mas não exato.
            String tituloUsuarioNormalizado = Normalizer.normalize(tituloOriginal, Normalizer.Form.NFD)
                    .replaceAll("\\p{M}", "")
                    .toLowerCase();
            return body.results().stream()
                    .filter(dto -> {
                        String tituloDtoNormalizado = Normalizer.normalize(dto.title(), Normalizer.Form.NFD)
                                .replaceAll("\\p{M}", "")
                                .toLowerCase();
                        return tituloDtoNormalizado.contains(tituloUsuarioNormalizado);
                    })
                    .findFirst()
                    .orElse(body.results().get(0));
        }
        return null;
    }
}
 
            