httpリクエストを作成するためにチョッパークライアントを使用します
API を作成しましたが、応答の種類が必要です: この形式での成功:
{
"id": 1,
"title": "Most Popular phone in the world !",
"image": "/uploads/poll_images/D6voYQriTCSZpMIe.jpg",
"submits": 2,
"views": 52,
"description": "There are many phone on the world, if you are buyer which one will you buy ?",
"date": {
"date": "2020.4.13",
"time": "12:02"
},
"comments": 0,
"options": [
{
"id": 1,
"position": 1,
"title": "iPhone 11 pro Max",
"votes": 1
},
{
"id": 2,
"position": 2,
"title": "Samsung S20+ Ultra",
"votes": 1
}
],
"selected": 2
}
ステータス コード 400 と次の形式のエラー応答:
{
"msg": "Your login session expired! please login again"
}
これに従って、応答用の buildValue コンバーターを作成します。
すべて問題なく、応答はデータモデルに正常に変換されますが、エラー応答を処理する方法がわかりません!
これは私の作成方法です:
static ApiService create() {
if (instance == null) {
instance = ChopperClient(
baseUrl: Commons.baseURL,
services: [_$ApiService()],
interceptors: [HttpLoggingInterceptor()],
converter: BuiltValueConverter(),
errorConverter: BuiltValueConverter(),
);
}
return _$ApiService(instance);
}
リクエスト方法:
@Get(path: 'poll/getSingle/{id}')
Future<Response<PollSingle>> getPollSingle({@Path('id') int pollId , @Query('client_id') int clientId});
構築値コンバーター:
class BuiltValueConverter extends JsonConverter {
final jsonSerializers =
(serializers.toBuilder()..addPlugin(StandardJsonPlugin())).build();
T _deserializer<T>(dynamic value) => jsonSerializers.deserializeWith(
jsonSerializers.serializerForType(T),
value,
);
@override
Response<ResultType> convertResponse<ResultType, Item>(Response response) {
final jsonResponse = super.convertResponse(response);
final body = _decode<Item>(jsonResponse.body);
return jsonResponse.copyWith<ResultType>(body: body);
}
dynamic _decode<T>(entity) {
print(entity);
if (entity is T) return entity;
try {
if (entity is List) return _deserializeListOf<T>(entity);
return _deserializer<T>(entity);
} catch (e) {
print(e);
return null;
}
}
BuiltList<T> _deserializeListOf<T>(Iterable value) => BuiltList(
value.map((value) => _deserializer<T>(value)).toList(growable: true),
);
}
エラー応答を処理するにはどうすればよいですか?