请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

怎么在响应拦截器里提取数据?

import 'package:dio/dio.dart';
import 'package:models/models.dart';

import 'custom_exception.dart';

class CustomExceptionInterceptor extends Interceptor {
  // 我想直接在响应拦截器里直接提取出Map<String, dynamic>接口数据,
  // 省的在每个repository里都要response.data拿数据,但是这两种写法都不行,老师帮忙看下,谢谢!
  // 写法1:
  // @override
  // void onResponse(Response response, ResponseInterceptorHandler handler) {
  //   handler.resolve(response.data);
  // }

  // 写法2:
  @override
  void onResponse(Response response, ResponseInterceptorHandler handler) {
    final data = response.data;
    response.data = data;
    return super.onResponse(response, handler);
  }
  /// Called when an exception was occurred during the request.
  @override
  void onError(DioException err, ErrorInterceptorHandler handler) {
    if (err.response != null) {
      final problem = Problem.fromJson(err.response!.data);
      throw CustomException(
        problem.title ?? err.message ?? 'Unknown error',
        problem.detail ?? 'Unknown Error',
        response: err.response!,
      );
    }
    super.onError(err, handler);
  }
}

正在回答 回答被采纳积分+3

插入代码

1回答

接灰的电子产品 2024-05-15 10:59:45

response.data 这个可没法省略,因为不管拦截器做什么还要返回一个正常的response啊,而这个response的数据就是通过 response.data 获得

0 回复 有任何疑惑可以回复我~
  • 提问者 春去_秋来 #1
    前端的axios可以
    // 响应拦截器
    instance.interceptors.response.use(
      function (response) {
        if (response.status.toString().startsWith('2')) {
          return response.data; // ***提取到数据***
        }
        return response;
      },
      function (error) {
        return Promise.reject(error);
      }
    );
    回复 有任何疑惑可以回复我~ 2024-05-15 11:01:50
  • 提问者 春去_秋来 #2
    那这么说这个onResponse响应拦截不是没什么用?
    回复 有任何疑惑可以回复我~ 2024-05-15 12:05:07
  • 接灰的电子产品 回复 提问者 春去_秋来 #3
    这是由于javascript 不是严格类型的语言,所以你可以给出不一样的对象结构
    回复 有任何疑惑可以回复我~ 2024-05-15 16:27:21
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号