#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??