EMİRŞAH ERDEN
EMİRŞAH ERDEN

Reputation: 33

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

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);
  }
}

Upvotes: 3

Views: 1642

Answers (1)

Jitesh Mohite
Jitesh Mohite

Reputation: 34160

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);
    }
  }

Upvotes: 2

Related Questions