When trying to post to the API, I get a "status": 400 error in Flutter

303

Use the simple map and pass it to jsonEncode

submitData(
      String name, String surname, String email, String plateNumber) async {
    try {
      Uri uri = Uri.parse("http://ngcyaz.com/api/drivers");
      final map = {
        "name": name,
        "surname": surname,
        "email": email,
        "plateNumber": plateNumber
      };
      Map<String, String> header = {"content-type": "application/json"};
      var response = await http.post(uri, body: jsonEncode(map), headers: header); 
      var data = response.body;
      print("data " + data);
      if (response.statusCode == 200) {
        String responseString = response.body;
        print("Response String: " + responseString);
      } else
        return null;
    } catch (e) {
      print(e);
    }
  }
Share:
303
EMİRŞAH ERDEN
Author by

EMİRŞAH ERDEN

Updated on November 27, 2022

Comments

  • EMİRŞAH ERDEN
    EMİRŞAH ERDEN over 1 year

    I/flutter (30384): data {"type":"https://tools.ietf.org/html/rfc7231#section-6.5.1","title":"One or more validation errors occurred.","status":400,"traceId":"|e3244589-485510f2c271c42c.","errors":{"$.name":["'name, "surname": surname, "email": email, "plateNumber": plateNumber}' is an invalid JSON literal. Expected the literal 'null'. Path: $.name | LineNumber: 0 | BytePositionInLine: 11."]}}

    Code here:

    DataModel class

    List<DataModel> dataModelFromJson(String str) =>
        List<DataModel>.from(json.decode(str).map((x) => DataModel.fromJson(x)));
    
    String dataModelToJson(List<DataModel> data) => json.encode(List<dynamic>.from(data.map((x) => x.toJson())));
    
    class DataModel {
      DataModel({
        this.name,
        this.surname,
        this.email,
        this.plateNumber,
      });
    
      int id;
      String name;
      String surname;
      String email;
      String plateNumber;
    
      factory DataModel.fromJson(Map<String, dynamic> json) => DataModel(
            name: json["name"],
            surname: json["surname"],
            email: json["email"],
            plateNumber: json["plateNumber"],
          );
    
      Map<String, dynamic> toJson() => {
            "name": name,
            "surname": surname,
            "email": email,
            "plateNumber": plateNumber,
          };
    }
    

    service class

    Future<DataModel> submitData(String name, String surname, String email, String plateNumber) async {
      try {
        Uri uri = Uri.parse("http://ngcyaz.com/api/drivers");
        String json = "{ \"name\": name, \"surname\": surname, \"email\": email, \"plateNumber\": plateNumber}";
        Map<String, String> header = {"content-type": "application/json"};
        var response = await http.post(uri, body: json, headers: header);
        var data = response.body;
        print("data " + data);
        if (response.statusCode == 200) {
          String responseString = response.body;
          dataModelFromJson(responseString);
        } else
          return null;
      } catch (e) {
        print(e);
      }
    }
    
    • Pathik Patel
      Pathik Patel almost 3 years
      Please check that value given to key name is not empty before hitting API.