Создайте POST-запрос со значением ключа Int, код состояния возвращает 422 или 415

#json #flutter #dart

#json #флаттер #dart

Вопрос:

Сначала я был смущен отправкой целочисленного значения в идентификатор ключа. Затем появится ошибка type 'int' is not a subtype of type 'String' in type cast .

После долгого времени исправления мне, наконец, удалось исправить предыдущую ошибку с помощью кода, подобного следующему:

 class UserData with ChangeNotifier {
  Map<String, dynamic> _map = {};
  bool _error = false;
  String _errorMessage = '';

  Map<String, dynamic> get map => _map;

  bool get error => _error;

  String get errorMessage => _errorMessage;

  Future<void> get fetchData async {
    final Map<String, dynamic> userBody = {
      'id': 1,
      'username': 'bunn1est',
    };
    String _body = jsonEncode(userBody);

    final response = await http.post(
      Uri.parse('https://*******'),
      headers: {
        "Accept": "application/json",
        "content-type": "application/json",
      },
      body: _body,
    );

    if (response.statusCode <= 1000) {
      try {
        _map = jsonDecode(response.body);
        _error = false;
      } catch (e) {
        _error = true;
        _errorMessage = e.toString();
        _map = {};
      }
    } else {
      _error = true;
      _errorMessage = "Error: It would be your internet connection";
      _map = {};
    }
    notifyListeners();
  }

  void initialValues() {
    _map = {};
    _error = false;
    _errorMessage = "";
    notifyListeners();
  }
}
 

Приведенный выше код работает нормально, но status code 422 вместо этого я получаю. И затем я получаю сообщение об ошибке status code 415 , если пытаюсь удалить заголовки внутри http.post

 headers: {
  "Accept": "application/json",
  "content-type": "application/json",
},
 

Что-то не так с моей моделью класса или ошибка возникает из-за того, что она на стороне сервера?

Если ошибка status code 422 появляется из-за моей ошибки в коде, какую часть я должен исправить?

Редактировать

Я пробовал это на postman, и это работает нормально. Я до сих пор не понял, как сохранить значение ключа с целочисленным типом данных

Комментарии:

1. Получаете ли вы тот же результат при попытке сделать запрос без флаттера, например, с Postman?

2. Я пробовал в postman, он работает нормально. Проблема возникает из-за ключа значения Int, который не может быть прочитан api

3.Вы создаете _body как строку, согласно http документации, это установит content-type на text/plain , и это нельзя переопределить. Возможно, проблема в том, что ваш серверный сервер не готов обрабатывать text/plain тело.

4. Другой вариант — установить body в качестве Map, в этом случае тип содержимого будет application/x-www-form-urlencoded , и, возможно, Postman использует то же самое, поэтому он работает с Postman.

5. Я нашел проблему. Вместо этого мне нужно преобразовать карту в Json JsonEncoder , используя jsonEncode . Спасибо за ваше время

Ответ №1:

Просто измените этот код

 final Map<String, dynamic> userBody = {
  'id': 1,
  'username': 'bunn1est',
};
String _body = jsonEncode(userBody);
 

с помощью этого

 int id = 1;
final  _body = {
  'id': id.toString(),
  'username': 'bunn1est',
};
 
 

Комментарии:

1. Не работает. Ваш приведенный выше код преобразует его в строку. Мне действительно нужно ключевое значение с целым числом.

2. вы пробовали это?? и каков был ответ от сервера??

3. яа уже попробовал это. код состояния 422. Кстати, я пробовал это на postman, и это работает нормально.

4. что такое веб-сайт api??