问题描述
我在一个项目上工作,并且在发布请求时遇到错误,当我使用邮递员时,它工作正常,但是当我使用Flutter时,它给了我异常,说type 'List<Map<String, String>>' is not a subtype of type 'String' in type cast
I work on a project and faced error when I post a request, When I use postman it works fine, but when I use Flutter it gives me exception said type 'List<Map<String, String>>' is not a subtype of type 'String' in type cast
- 请求使用嵌套列表.
邮递员的身体和反应:( https://i.imgur.com/HS5Y6CA.png )
Postman body and response :(https://i.imgur.com/HS5Y6CA.png)
Flutter代码:
Flutter Code :
try {
http.Response response = await http.post(Uri.parse(url),
headers: {
"Accept": "application/json",
'authorization' : 'Bearer ${tokenValue}',
},
body: {
"date": "2019-12-30",
"studentId": "1",
"amount": "10",
"numberOfItems": "2",
"mqsfId": "1",
"items": [{
"itemCount": "1",
"productId": "1",
"productName": "Apple juice",
"productPrice": "8"
}, {
"itemCount": "1",
"productId": "2",
"productName": "Sandwish",
"productPrice": "2"
}]
});
resBody = json.decode(response.body);
if (response.statusCode == 201) {
// Some Actions
} else {
// Some Actions
}
} catch(e) {
print(e);
}
此代码返回我异常提示:type 'List<Map<String, String>>' is not a sub type of type 'String' in type cast
this code returns me exception said: type 'List<Map<String, String>>' is not a sub type of type 'String' in type cast
当我将嵌套列表转换为String时:
when I convert nested List to String like this:
"items":[{
"itemCount": "1",
"productId": "1",
"productName": "Apple juice",
"productPrice": "8"
}, {
"itemCount": "1",
"productId": "2",
"productName": "Sandwish",
"productPrice": "2"
}].toString()
它发送请求并以StatusCode 500
返回服务器错误,但是当我检查数据库时记录了订单,但是nested array is empty !!
It sends the request and returns Server Error with StatusCode 500
, but when I check on the database the order is recorded but the nested array is empty !!
记录的数据示例(服务器错误请求的输出):
Example of data recorded (Output of server error request):
date: 2019-12-30,
studentId: 1,
amount: 10,
numberOfItems: 2,
mqsfId: 1,
items:[]
// item shouldn't be empty
推荐答案
直到我发现这个来自文档:
body sets the body of the request. It can be a String, a List<int> or a Map<String, String>.
并且仅将字段的值转换为String显然会阻止其解析.
And making only a field's value converted to String apparently prevents its parsing.
好,让我们尝试一下(基于此处):
Ok let's try this (based on here):
http.Response response = await http.post(Uri.parse(url),
headers: {
'Content-type' : 'application/json',
"Accept": "application/json",
'authorization' : 'Bearer ${tokenValue}',
},
body: json.encode({
"date": "2019-12-30",
"studentId": "1",
"amount": "10",
"numberOfItems": "2",
"mqsfId": "1",
"items":[
{
"itemCount": "1",
"productId": "1",
"productName": "Apple juice",
"productPrice": "8"
},
{
"itemCount": "1",
"productId": "2",
"productName": "Sandwish",
"productPrice": "2"
}
]
})
);
这篇关于类型'List< Map< String,String>>'在类型转换中不是'String'类型的子类型的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!