Retrofit中的ResponseConverter的处理顺序

2023-11-07

Retrofit选择ResponseConverter的流程如下:

HttpServiceMethod Retrofit parseAnnotations createResponseConverter responseBodyConverter nextResponseBodyConverter retrun ResponseConverter HttpServiceMethod Retrofit

在HttpServiceMethod的parseAnnotations中会创建处理返回数据的Converter(如果不太清楚流程的话要可以看看前面的一篇文章:Retrofit请求流程):

    Converter<ResponseBody, ResponseT> responseConverter =
        createResponseConverter(retrofit, method, responseType);
  private static <ResponseT> Converter<ResponseBody, ResponseT> createResponseConverter(
      Retrofit retrofit, Method method, Type responseType) {
    Annotation[] annotations = method.getAnnotations();
    try {
      return retrofit.responseBodyConverter(responseType, annotations);
    } catch (RuntimeException e) { // Wide exception range because factories are user code.
      throw methodError(method, e, "Unable to create converter for %s", responseType);
    }
  }

retrofit会把返回类型和方法上的注解回调给用户,由用户去匹配Converter

  public <T> Converter<ResponseBody, T> responseBodyConverter(Type type, Annotation[] annotations) {
    return nextResponseBodyConverter(null, type, annotations);
  }

从初始化时后,添加的convert中去匹配,如果返回的converter不为null,则返回,结束循环,如果没添加convert则使用系统默认的,匹配的顺序由添加时决定。

  public <T> Converter<ResponseBody, T> nextResponseBodyConverter(
      @Nullable Converter.Factory skipPast, Type type, Annotation[] annotations) {
    Objects.requireNonNull(type, "type == null");
    Objects.requireNonNull(annotations, "annotations == null");

    int start = converterFactories.indexOf(skipPast) + 1;
    for (int i = start, count = converterFactories.size(); i < count; i++) {
      Converter<ResponseBody, ?> converter =
          converterFactories.get(i).responseBodyConverter(type, annotations, this);
      if (converter != null) {
        //noinspection unchecked
        return (Converter<ResponseBody, T>) converter;
      }
    }

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Retrofit中的ResponseConverter的处理顺序 的相关文章

  • 解决QString类型中一些使用规则

    参考网页 http www kuqin com qtdocument qstring html fromLatin1 1 QString类型中的使用 QString str QString fromLatin1 123456789 5 st
  • nginx负载均衡与日志配置

    nginx负载均衡与日志配置 1 设置nginx负载均衡 1 1 找到nginx conf文件 并进行配置 2 设置nginx日志 2 1 找到nginx conf文件 配置日志nginx日志 2 查看 设置 1 设置nginx负载均衡 当
  • 史上无敌的超级详细的Node Js 环境搭建步骤

    今日分享内容 一 Node Js 环境搭建 1 Node js是什么 2 npm是什么 3 环境搭建步骤 二 Element简介 一 Node Js 环境搭建 1 Node js是什么 Node js是一个基于Chrome V8引擎的 Ja
  • DBCP 1.X 导致的生产环境部署问题

    应用部署到生产环境 启动后 首次登录没问题 再过几分钟或者说再次登录 却出现登录没响应 查询数据界面没响应等 数据库查询没响应的问题 但奇怪的是后台没任何不报错 初步怀疑是数据库会话数爆满引起的 通过LambdaProbe监控工具 发现应用
  • (入门题)题目 1579: 陶陶摘苹果2

    题目 陶陶家的院子里有一棵苹果树 每到秋天树上就会结出n个苹果 苹果成熟的时候 陶陶就会跑去摘苹果 陶陶有个30厘米高的板凳 当她不能直接用手摘到苹果的时候 就会踩到板凳上再试试 现在已知n个苹果到地面的高度 以及陶陶把手伸直的时候能够达到
  • 火影手游饰品分解

    文章目录 Part I 简介 Chap I 饰品种类与抗魔 Chap II 战力加成 Part II 强化消耗与分解返还 Chap I 祝福饰品分解返还与耗材 Chap II 祈愿饰品 130 Chap III 破晓饰品 140 及以后 P
  • 企业数字化转型过程中面临最大的挑战和问题是什么?

    无论组织规模如何 业务的敏捷性 弹性以及生产力的高低都是决定其发展运营成功与否的关键因素 而一个良好的数字化转型战略则是企业发展进步的有力助推器 麦肯锡称 借助数字化转型 可以实现 20 至 50 的经济收益和 20 至 30 的客户满意度
  • 【Unity】简单介绍使用Sprite Editor的四种裁剪

    学习目标 众所周知当我们在Untiy导入一张Sprite图的时候需要修改它的参数 如果精灵图中有多张图片 还要将其裁剪 今天简单介绍一下SpriteEditor中的三种模式 学习内容 首先我们要将一张图片模式设置成Mulitple模式 这样
  • leetcode 27 [remove val]

    leetcode 27 remove val 改进前 class Solution public int removeElement vector
  • 不做标题党软文营销如何写出好标题

    为软文选择出色的软文标题是任何内容营销策略不可或缺的一部分 吸引人的标题可以使读者点击开始阅读 知道什么标题效果好 这对软文的整体参与度和转化率有很大帮助 读者点开你的软文次数越多 业务就会获得更多的曝光度 因此引人注目的软文标题至关重要
  • 亲测——eclipse中windowBuilder插件的5种安装方式

    windowBuilder的安装方法 方法1 在Eclipse MarketPlace 插件市场中搜索在线安装 依次点击help Eclipse MarketPlace 在find中搜索 windowBuilder点击install安装即可
  • as3 java 交互_AS3与交互

    1 与Socket服务器建立连接 2 向Socket服务器发送数据 3 从Socket服务器读数据 4 同Socket服务器进行握手 并确定收到了什么样的数据和如何处理这些数据 5 与Socket服务器断开 或者当服务器想与你断开的时候发消
  • 漫步数理统计三十一——依分布收敛

    上篇博文我们介绍了依概率收敛的概念 利用着概念我们可以说统计量收敛到一个参数 而且在许多情况下即便不知道统计量的分布函数也能说明收敛 但是统计量有多接近估计量呢 本篇博文讲的收敛就回答了这个问题 定义1 textbf 23450 20041
  • 深圳地铁远期规划20条线路图首发

    深圳市城市轨道网络远期共规划了20条线路 总里程约748 5公里 含弹性发展线路约73 7公里 同时规划了5条城际线路 形成约146 2公里的城际线网 加上国家铁路 深圳市轨道交通总里程远景规划将达到1080公里 轨道规模和密度与东京等国际
  • git commit回退,lfs上传

    一 如何回退到之前的commit 1 查看之前的commit git log 选择一个commit 执行 git reset hard commit号 会清空当前目录下和仓库不一致的文件 回退commit但不删除代码 可以 git rese
  • 小程序调用接口报错,会返回 {“error“:600001,“errMsg“:“request:fail -102:net::ERR_CONNECTION_REFUSED“} 问题。

    error 600001 errMsg request fail 102 net ERR CONNECTION REFUSED 这个错误是网络连接被拒绝的错误 它通常表示无法建立与服务器的连接 这种问题可能有几个可能的原因 1 服务器故障
  • PyTorch 深度学习实践 第8讲

    第8讲 加载数据集 源代码 B站 刘二大人 传送门PyTorch深度学习实践 加载数据集 说明 1 DataSet 是抽象类 不能实例化对象 主要是用于构造我们的数据集 2 DataLoader 需要获取DataSet提供的索引 i 和le

随机推荐

  • python基础------时间戳、时间组、时间串、日期相互转化和日历以及练习

    1 时间组 时间戳 时间串相互转化 import time 时间戳 tt time time print tt 时间组 b time localtime tt print b 时间组转化为时间串 striftime asctime c ti
  • VS2015编译Boost1.64

    一 下载并解压 boost1 64 0 http www boost org users history version 1 64 0 html
  • 机器学习和传统编程的比较

    该文章 对机器学习和传统编程方法进行了比较 一个结论值得重视 ML just like AI is not a substitution but supplementation for traditional programming app
  • Linux网络编程:IO多路复用——poll

    服务器端代码 poll 对select技术的改进 include
  • 英语介词学习(基础)

    文章目录 前言 介词概念 常见介词 空间介词 时间介词 方式介词 原因介词 关于介词 数值介词 状态介词 排除介词 总结 前言 本文主要目的是为了辨析各类基础介词 为了更好的背诵一些短语介词 如有错误 欢迎指正 介词概念 介词用来表示前置词
  • JAVA基础编程练习题

    编写一个程序 输入两个整数 计算它们的和并输出结果 import java util Scanner public class Main public static void main String args Scanner input n
  • os.getcwd()以及os.walk()用法

    os getcwd 以及os walk 用法 os getcwd 获取当前代码文件所在路径 例如 os getcwd 输出 C Users 17843 Jyputer notebook file word转换pdf源代码 os walk 获
  • 使用java实现基础的家庭记账程序

    家庭记账程序 需求说明 具体操作 完整代码 总结 需求说明 1 该程序能够记录家庭的收入 支出 并能打印收支明细表 2 项目采用分级菜单的方式 主菜单如下 3 假设家庭起始的生活基本金为10000元 4 每次登记收入 菜单2 后 收入的金额
  • java种的 author,在Intellij中自动完成@author

    I m migrating from Eclipse to Intellij Idea One thing I couldn t figure out yet is autocompletion of the author JavaDoc
  • linux命令后缀-d和 都表示后台启动,Linux复习材料_关宇亮整理版.doc

    Linux复习材料 关宇亮整理版 Linux目录 第1章1 Linux的内核版与发行版的区别2 2个开发标准规范 4 常见的Linux发行版 5 Unix与Linux的关系与区别 6 Linux的特性与优缺点 7 Linux的安装与分区 分
  • “微众区块链”品牌正式发布

    4月27日下午 以 新机遇 新使命 新出发 为主题的微众区块链品牌全新发布会在深圳成功举行 会上 微众银行正式宣布推出 微众区块链 全新品牌 并提出了 构筑ESG可信基础设施 促进公平与可持续 的全新使命 致力于为ESG 环境 社会和公司治
  • Netty 系列之编解码器和 handler 的调用机制

    编码和解码的基本介绍 编写网络应用程序时 因为数据在网络中传输的都是二进制字节码数据 在发送数据时就需要编码 接收数据时就需要解码 codec 编解码器 的组成部分有两个 decoder 解码器 和 encoder 编码器 encoder
  • C++数据结构之--ArrayList(数组实现list)详解

    什么是List List是一种常见的数据结构 用于存储一系列有序的元素 它允许存储 访问 添加 删除和修改元素 可以根据需要动态调整大小 以下是List的一些常见特点和用途 List中的元素按照它们被添加的顺序进行存储 并可以根据索引进行访
  • 希沃展台如何使用_简单又实用的希沃视频展台

    而希沃7系列视频展台恰是一款简单又实用的视频展台 拥有强大的展示能力 这一切无疑得益于其强大的技术内核 让许多手机都惊叹的1200w超清像素摄像头 比上一代芯片面积高出77 的数码相机级别传感器 1080P下水平垂直解析度可达1800线以上
  • linux team 模式,linux 聚合口 team & libteam 简介

    详见 libteam 项目 wiki libteam ppt 架构 目标 替代 bonding 功能 最终干掉 bonding 内核中的代码尽可能少 把内核当成是 puppet 控制逻辑在用户空间实现 puppeteer 整个项目称为 te
  • Python环境搭建之OpenCV

    一 openCV介绍 Open Source Computer Vision Library OpenCV于1999年由Intel建立 如今由Willow Garage提供支持 OpenCV是一个基于BSD许可 开源 发行的跨平台计算机视觉
  • 初识 EasyExcel-转载

    EasyExcel 转载 mob604756ef7d062021 09 15 15 28 00 文章标签数据实体类解决方法apache封装文章分类代码人生阅读数1276 EasyExcel 一 初识 EasyExcel 1 Apache P
  • 怎样更改计算机文件图标,文件夹图标怎么改?电脑更换文件夹图标的方法

    正常情况下 电脑桌面文件夹图标都是默认的 是不是偶尔看着有些审美疲劳 一些用户想让自己的文件夹漂亮一些或者有辨识度 想要改文件夹图标 那么文件夹图标怎么改 这里小编为大家推荐一种更改桌面图标的方法 1 打开需要更换图标的文件所在的文件夹 以
  • nohup和screen都是后台执行用的指令,有啥区别?

    Screen 之前用服务器跑模型ssh断了 程序也就跑死了 我当时是用到了screen指令 之前写的可以去看看 大致流程 1 首先安装screen yum install y screen 2 创建screen实例 screen S me
  • Retrofit中的ResponseConverter的处理顺序

    Retrofit选择ResponseConverter的流程如下 mermaid svg A0BABLoNrnvTlAVA label font family trebuchet ms verdana arial font family v