Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Projeto] Retorno da Api

Olá pessoal, Após conseguir executar o código para ter o retorno da api. Na minha console estou recebendo o retorno com caracteres especiais: Insira aqui a descrição dessa imagem para ajudar na acessibilidadeO Enconding no intellij está com Utf-8, teria alguma outra configuração a ser realizada?

O retorno pelo postman está normal: Insira aqui a descrição dessa imagem para ajudar na acessibilidade

2 respostas

Olá Wellington. Tudo bem?

Aparentemente o problema está relacionado ao encoding do retorno da API no console do IntelliJ. Mesmo que o encoding do IntelliJ esteja configurado para UTF-8, o problema pode estar na forma como a resposta está sendo interpretada ou exibida no console.

Aqui estão algumas sugestões para resolver o problema:

  1. Verifique o Encoding da Resposta: Verifique se o encoding da resposta da API está sendo tratado corretamente. Você pode especificar o charset ao criar o HttpRequest ou ao processar a resposta.

  2. Forçar o Encoding no Console: Tente adicionar a seguinte linha no início do seu main para garantir que o console do Java use UTF-8:

    System.setOut(new PrintStream(System.out, true, "UTF-8"));
    
  3. Verifique o Header da Resposta: Verifique se a resposta da API inclui um header Content-Type com charset especificado. Isso pode ajudar a garantir que o cliente HTTP interprete a resposta corretamente.

  4. Teste com Outra Ferramenta: Se possível, teste o mesmo código em outra IDE ou em um ambiente diferente para verificar se o problema persiste.

  5. Depuração: Adicione logs para verificar o conteúdo bruto da resposta antes de processá-la. Isso pode ajudar a identificar se o problema está na recepção ou na exibição dos dados.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.Bons Estudos!
solução!

Realizei alguns ajustes que funcionou no meu caso, além de adicionar o charset-8, realizei algumas alterações. Aqui está como ficou:

package br.com.alura.screenmatch.principal;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Authenticator;
import java.net.InetSocketAddress;
import java.net.PasswordAuthentication;
import java.net.ProxySelector;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.zip.GZIPInputStream;

public class PrincipalComBusca {
    public static void main(String[] args) {
      
        
        System.out.println(jsonResponse); // Imprime o JSON retornado no console
    }

    public static String fetchData(String username, String password) {
       HttpClient client = HttpClient.newHttpClient();

        try {
            // Configuração da requisição
            HttpRequest request = HttpRequest.newBuilder()
                    .uri(URI.create("http://www.omdbapi.com/?apikey=b57420eb&t=matrix"))
                    .build();

            // Envio da requisição
            HttpResponse<byte[]> response = client.send(request, HttpResponse.BodyHandlers.ofByteArray());

            // Determina o charset do conteúdo (padrão para UTF-8 caso não especificado)
            Charset charset = response.headers()
                    .firstValue("Content-Type")
                    .map(contentType -> {
                        String[] parts = contentType.split(";");
                        for (String part : parts) {
                            if (part.trim().startsWith("charset=")) {
                                return Charset.forName(part.trim().substring(8));
                            }
                        }
                        return StandardCharsets.UTF_8; // Valor padrão
                    })
                    .orElse(StandardCharsets.UTF_8);

            // Verifica se o conteúdo está compactado
            if ("gzip".equalsIgnoreCase(response.headers().firstValue("Content-Encoding").orElse(""))) {
                // Descompacta manualmente o conteúdo
                try (GZIPInputStream gzipStream = new GZIPInputStream(new java.io.ByteArrayInputStream(response.body()));
                     BufferedReader reader = new BufferedReader(new InputStreamReader(gzipStream, charset))) {
                    StringBuilder responseBody = new StringBuilder();
                    String line;
                    while ((line = reader.readLine()) != null) {
                        responseBody.append(line);
                    }
                    return responseBody.toString();
                }
            } else {
                // Retorna o conteúdo diretamente com o charset correto
                return new String(response.body(), charset);
            }
        } catch (IOException | InterruptedException e) {
            e.printStackTrace();
            return null; // Em caso de erro, retorna null ou outro tratamento adequado
        }
    }


}