![](/img/trans.png)
[英]Converting JSON response to Model Object using Chopper library in flutter?
[英]problem converting json response to object in Flutter
首先對我的“英語”感到抱歉...我正在嘗試使用 API 方法使用 http package13CC2686.B7D8Z 我能夠從 API 獲得響應,但我無法嘗試 map 對我的自定義 object 的響應(json)調用 APILoginResponse。
我正在調用 API 方法,如下所示:
APILoginResponse apiLogin = await api.apiLogin();
但我收到運行時錯誤“動態不是 AccessToken 的子類型”。
這是我的 API 登錄方法:
Future<APILoginResponse> apiLogin() async {
final http.Response response = await http.post(
api_end_point + '/api/Auth/login',
headers: <String, String>{
'Content-Type': 'application/json; charset=UTF-8',
},
body: jsonEncode(
<String, String>{'userName': api_user, 'password': api_password}),
);
if (response.statusCode == 200) {
return APILoginResponse.fromJson(json.decode(response.body));
} else {
throw Exception('Error en login de la API');
}
}
...這是我的 APILoginResponse object:
class APILoginResponse {
final AccessToken accessToken;
final String refreshToken;
APILoginResponse({this.accessToken, this.refreshToken});
factory APILoginResponse.fromJson(Map<String, dynamic> json) {
return APILoginResponse(
accessToken: json['accessToken'],
refreshToken: json['refreshToken'],
);
}
}
class AccessToken {
String token;
int expiresIn;
}
錯誤在行中:
accessToken: json['accessToken']
在 APILoginResponse class 內部。
這是我的 json 回復:
{
"accessToken": {
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL3dzLzIwMDgvMDYvaWRlbnRpdHkvY2xhaW1zL3JvbGUiOiIiLCJzdWIiOiJib3N0b25jcmVkX2NsaWVudGVzIiwianRpIjoiZjBkMzY0ZDMtMmRkNS00NzkzLWE5ZTktMzY1YzJmODNiYmI3IiwiaWF0IjoxNTk0MTMxODAwLCJyb2wiOiJhcGlfYWNjZXNzIiwiaWQiOiIyMzg3YTMzZi1hYzE5LTRhMzYtODcyZC04MTE3MzExZDFjY2IiLCJuYmYiOjE1OTQxMzE3OTksImV4cCI6MTU5NDEzMjM5OSwiaXNzIjoid2ViQXBpIiwiYXVkIjoiaHR0cHM6Ly9sb2NhbGhvc3Q6NDQzMTcvLyJ9.PqCPkVct4e4duWFEr63fALZ0h_0x25vsV_GBx336Apw",
"expiresIn": 600
},
"refreshToken": "W6wyiw9xYuC2UaJmyCOYujKIZTs0jAscnfcWTrEyVIk="
}
對此的任何幫助將不勝感激。 謝謝!
如果你確定返回值是一個AccessToken
你可以試試這個:
factory APILoginResponse.fromJson(Map<String, dynamic> json) {
return APILoginResponse(
accessToken: (json['accessToken'] as Map<String,dynamic>) as AccessToken ?? null,
refreshToken: json['refreshToken'],
);
}
將您的 AccessToken class 更改為:
class AccessToken {
final Map<String,dynamic> tokenData;
AccessToken(tokenData)
}
好吧,我認為@P4yam 的答案是正確的,但我一遍又一遍地遇到同樣的錯誤,所以我更改了我的 APILoginResponse class 如下:
class APILoginResponse {
AccessToken accessToken;
String refreshToken;
APILoginResponse({this.accessToken, this.refreshToken});
APILoginResponse.fromJson(Map<String, dynamic> json) {
accessToken = json['accessToken'] != null
? new AccessToken.fromJson(json['accessToken'])
: null;
refreshToken = json['refreshToken'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
if (this.accessToken != null) {
data['accessToken'] = this.accessToken.toJson();
}
data['refreshToken'] = this.refreshToken;
return data;
}
}
class AccessToken {
String token;
int expiresIn;
AccessToken({this.token, this.expiresIn});
AccessToken.fromJson(Map<String, dynamic> json) {
token = json['token'];
expiresIn = json['expiresIn'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['token'] = this.token;
data['expiresIn'] = this.expiresIn;
return data;
}
}
現在一切正常! 謝謝!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.