2
respostas

Erro no retorno

Olá,

Podem me ajudar? Estou tentando um login em uma api que tenho aqui onde devo passar um usuário e senha e receber o token para validação. Fiz os testes no Postman e, quando está tudo ok no Post, retorna um statuscode = 201 e os dados, juntamente com o token, o problema é quando eu digito um usuário e/ou senha inválidos, ele aparece apenas isso no console:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Fiz um teste aqui informando um retorno que inicia diferente de 2 (no caso quando é sucesso, retorna 201) então, se é um "erro", deveria jogar a exceção, mas isso não ocorre, apenas o que aparece no print acima.

Este é o código que usei:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Fiz um teste no Postman, digitando a senha do usuário "admin" errada e retorna dessa forma:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Como eu faço pra pegar esse retorno? Pensei que printando o response.body apareceria também, logo no teste do código != 2 mas só fica naquela do primeiro print.

2 respostas

Olá Alvaro,

Essa mensagem FormatException: Missing extension byte está te dizendo que tem um problema ao tentar decodificar a resposta como UTF-8.

Veja se a API está retornando a resposta no formato esperado (UTF-8). Se não estiver, você pode precisar especificar o formato correto ao decodificar a resposta.

Antes de tentar decodificar o corpo da resposta como JSON, tente decodificá-lo explicitamente como UTF-8. Isso pode resolver o problema.

login({required String user, required String password}) async {
  http.Response response = await client.post(
    Uri.parse('$url$resource'),
    body: {'username': user, 'password': password},
  );

  if (response.statusCode ~/ 100 != 2) {
    // Tente decodificar a resposta como UTF-8
    var decodedBody;
    try {
      decodedBody = utf8.decode(response.bodyBytes);
    } catch (e) {
      print('Erro ao decodificar a resposta: $e');
      throw HttpException('Erro ao decodificar a resposta');
    }

    throw HttpException(decodedBody);
  } else {
    Map<String, dynamic> content = json.decode(response.body);
    print(content['access_token']);
  }
}

Veja tbm se a API está retornando os cabeçalhos HTTP corretamente, especialmente o cabeçalho Content-Type. A configuração deve ser como application/json; charset=utf-8 ou algo assim para garantir que os clientes saibam como decodificar a resposta de maneira certa;

abs!

Oi,

Tentei com o seu código, mas parece que não muda nada no retorno, continua igual:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Pelo Postman, olhei o Content-type está: application/json;charset=utf-8;charset=utf-8

Insira aqui a descrição dessa imagem para ajudar na acessibilidade