1
resposta

Retorno de erro no response.body ao salvar as transações na API

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

o response.body tá retornando esse erro. O método envia a transação para ser salva e retorna esse erro no response.body. Alguem consegue me ajudar ?

import 'dart:convert';

import 'package:bytebank/http/web_client.dart';
import 'package:bytebank/models/transaction.dart';
import 'package:http/http.dart';

class TransactionWebClaint {
  Future<List<Transaction>> findAllWebClient() async {
    final Response response = await client
        .get(Uri.parse(baseUrl))
        .timeout(const Duration(seconds: 5));
    final List<dynamic> decodeJson = jsonDecode(response.body);
    return decodeJson
        .map((dynamic json) => Transaction.fromJson(json))
        .toList();
  }

  Future<Transaction> saveWebClient(Transaction transaction) async {
    Map<String, dynamic> transactionMap = _toMap(transaction);
    final String transactionJson = jsonEncode(transactionMap);
    final Response response = await client.post(Uri.parse(baseUrl),
        headers: <String, String>{
          "Contet-type": "application/json, charset=UTF-16",
          "password": "1000"
        },
        body: transactionJson);

    return Transaction.fromJson(jsonDecode(response.body));
  }

  Map<String, dynamic> _toMap(Transaction transaction) {
    final Map<String, dynamic> transactionMap = {
      "value": transaction.value,
      "contact": {
        "name": transaction.contact.name,
        "accountNumber": transaction.contact.accountNumber
      }
    };
    return transactionMap;
  }
}

Código do Web_Client

1 resposta

Olá, Breno! Como vai?

Desculpa a demora. Estou respondendo esse tópico para tentar ajudar você e outros alunos que estiverem com essa mesma dúvida :D

Uma possível causa para esse erro é a configuração do cabeçalho da requisição. No trecho de código onde você define os headers, notei que há um erro de digitação na palavra "Content-type". Acredito que o correto seria "Content-Type". Além disso, o valor do charset está como "UTF-16", mas normalmente utilizamos "UTF-8" para codificação de caracteres.

Sugiro que você faça essa correção no cabeçalho da requisição e teste novamente. Ficaria assim:

final Response response = await client.post(Uri.parse(baseUrl),
    headers: <String, String>{
      "Content-Type": "application/json; charset=UTF-8",
      "password": "1000"
    },
    body: transactionJson);

Dessa forma, você estará definindo corretamente o cabeçalho da requisição com o tipo de conteúdo e a codificação correta.

Espero que essa sugestão resolva o seu problema! Se ainda tiver alguma dúvida, é só me perguntar. Estou aqui para ajudar!

Espero ter ajudado e bons estudos!