新闻详情

新闻详情

首页 / 资讯中心 / 详情

网络 - Ktor(Retrofit 迁移版)

发布时间:2026/9/27 6:58:48来源:尧图网络
网络 - Ktor(Retrofit 迁移版)
一、概念二、添加依赖最新版本[versions] ktor 3.6.0 [libraries] ktor-core { module io.ktor:ktor-client-core, version.ref ktor } #核心库 ktor-okhttp { module io.ktor:ktor-client-okhttp, version.ref ktor } #Android用OkHttp ktor-negotiation { module io.ktor:ktor-client-content-negotiation, version.ref ktor } #内容协商 ktor-serialization { module io.ktor:ktor-serialization-kotlinx-json, version.ref ktor } #序列化 ktor-logging { module io.ktor:ktor-client-logging, version.ref ktor } #日志三、客户端迁移直接复用 OkHttp 设置只需要将 Retrofit 配置的替换掉。object KtorClient { // Json解析 private val json by lazy { Json { prettyPrint true // isLenient true //宽松解析单引号、松散JSON ignoreUnknownKeys true // 忽略接口返回的多余字段服务端新增字段不会导致崩溃容错升级 } } // OkHttp private val okHttp by lazy { OkHttpClient.Builder().build() } // Ktor private val ktor by lazy { HttpClient(OkHttp) { // 内容协商 install(ContentNegotiation) { json(json) // Json解析 } // BaseUrl install(DefaultRequest) { url() } // 引擎 engine { preconfigured okHttp // 用okhttp } } } // ApiService val apiService by lazy { ApiService(ktor) } }四、网络请求迁移从「声明式注解」变成「显式函数调用」。RetrofitKtorGET / POST / PUT / DELETEclient.get() / client.post() / client.put() / client.delete()PathURL 字符串拼接users/$idQueryparameter(key, value)QueryMapparameter()逐个调用或遍历 MapBodysetBody(obj)Headerheader(name, value)Headersheader()多次调用FormUrlEncodedFieldsetBody(FormDataContent(...))或submitForm()MultipartPartsetBody(MultiPartFormDataContent(...))Url直接传完整 URLStreamingprepareGet().execute { }流式读取class ApiService( private val client: HttpClient ) { // 请求方法 }4.1 GET// Retrofit GET(users) suspend fun getUsers(): ListUser // Ktor suspend fun getUsers(): ListUser client.get(users).body()4.2 Path 参数// Retrofit GET(search) suspend fun search( Query(keyword) keyword: String, Query(page) page: Int ): ListResult // Ktor suspend fun search(keyword: String, page: Int): ListResult client.get(search) { parameter(keyword, keyword) parameter(page, page) }.body()4.3 Query 参数// Retrofit GET(search) suspend fun search( Query(keyword) keyword: String, Query(page) page: Int ): ListResult // Ktor suspend fun search(keyword: String, page: Int): ListResult client.get(search) { parameter(keyword, keyword) parameter(page, page) }.body()4.4 POST Body// Retrofit POST(users) suspend fun createUser(Body user: User): User // Ktor suspend fun createUser(user: User): User client.post(users) { contentType(ContentType.Application.Json) setBody(user) }.body()4.5 Header// Retrofit GET(profile) suspend fun getProfile(Header(Authorization) token: String): Profile // Ktor suspend fun getProfile(token: String): Profile client.get(profile) { header(Authorization, token) }.body()4.6 固定 HeaderHeaders// Retrofit Headers(X-Client: android, Accept: application/json) GET(config) suspend fun getConfig(): Config // Ktor suspend fun getConfig(): Config client.get(config) { header(X-Client, android) header(Accept, application/json) }.body()4.7 表单提交FormUrlEncoded// Retrofit FormUrlEncoded POST(login) suspend fun login( Field(username) username: String, Field(password) password: String ): LoginResult // Ktor import io.ktor.client.request.forms.* suspend fun login(username: String, password: String): LoginResult client.submitForm( url login, formParameters parameters { append(username, username) append(password, password) } ).body() // 或者用 setBody suspend fun login(username: String, password: String): LoginResult client.post(login) { setBody(FormDataContent(parameters { append(username, username) append(password, password) })) }.body()4.8 文件上传Multipart// Retrofit Multipart POST(upload) suspend fun upload( Part file: MultipartBody.Part, Part(desc) desc: RequestBody ): UploadResult // Ktor import io.ktor.client.request.forms.* import io.ktor.http.content.* suspend fun upload(fileBytes: ByteArray, fileName: String, desc: String): UploadResult client.post(upload) { setBody(MultiPartFormDataContent( formData { append(desc, desc) append(file, fileBytes, Headers.build { append(HttpHeaders.ContentType, image/jpeg) append(HttpHeaders.ContentDisposition, filename\$fileName\) }) } )) }.body()4.9 完整 URLUrl// Retrofit GET suspend fun getByUrl(Url url: String): Response // Ktor suspend fun getByUrl(url: String): Response client.get(url).body()五、返回值基类
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

【中台·业务篇】订单中心与支付中心:通用业务能力沉淀与复用 2026/9/27 6:58:45

【中台·业务篇】订单中心与支付中心:通用业务能力沉淀与复用

前言 用户中心解决了"你是谁"的问题,订单中心解决的是"你买了什么"的问题,支付中心解决的是"钱怎么收"的问题。这三者构成业务中台最核心的交易闭环。上一篇详解了用户中心,本文将深入订单中心和支付中心的架构…

阅读更多 →
计算机毕业设计选题推荐:基于spring boot的水产品管理系统、毕业设计选题、计算机毕设、选题推荐、毕设指导、项目定制、源码、高质量项目 2026/9/27 6:58:45

计算机毕业设计选题推荐:基于spring boot的水产品管理系统、毕业设计选题、计算机毕设、选题推荐、毕设指导、项目定制、源码、高质量项目

💖💖作者:计算机编程小咖 💙💙个人简介:曾长期从事计算机专业培训教学,本人也热爱上课教学,语言擅长Java、微信小程序、Python、Golang、安卓Android等,开发项目包括大数…

阅读更多 →
Strands Evals v1.2.0 发布解读:OpenInference 多框架追踪支持与技能级评估器实战指南 2026/9/27 6:58:45

Strands Evals v1.2.0 发布解读:OpenInference 多框架追踪支持与技能级评估器实战指南

人工智能大模型AI AgentAgent 框架多智能体工具调用MCP 服务 【免费下载链接】harness-sdk Build an agent harness and control it end-to-end. Open-source SDK for production AI agents in Python & TypeScript - any model, any cloud. 项目地址: https://…

阅读更多 →
AI Engineering 学习路线:Chip Huyen 四级能力阶梯,从单条提示词到生产部署 2026/9/27 6:58:38

AI Engineering 学习路线:Chip Huyen 四级能力阶梯,从单条提示词到生产部署

AI Engineering 学习路线:Chip Huyen 四级能力阶梯,从单条提示词到生产部署 【免费下载链接】aie-book [WIP] Resources for AI engineers. Also contains supporting materials for the book AI Engineering (Chip Huyen, 2025) 项目地址: https://gi…

阅读更多 →
strands-agents Python SDK v1.31.0 技术解读:A2A 上下文传递、Graph 执行优化与 OpenAI 模型层修复 2026/9/27 6:58:32

strands-agents Python SDK v1.31.0 技术解读:A2A 上下文传递、Graph 执行优化与 OpenAI 模型层修复

人工智能大模型AI AgentAgent 框架多智能体工具调用MCP 服务 【免费下载链接】harness-sdk Build an agent harness and control it end-to-end. Open-source SDK for production AI agents in Python & TypeScript - any model, any cloud. 项目地址: https://…

阅读更多 →
网站的通栏怎么做性能优化 2026/9/27 6:58:31

网站的通栏怎么做性能优化

网站通栏怎么做兼顾安全与SEO的最佳实践 上周刚帮一个做B2B机械的客户排查故障,他的网站首页突然弹出了博彩广告,后台代码里赫然多了一段混淆过的JavaScript。客户急得打电话问我:“网站被黑挂马不知道怎么办?”这种时候,90%的人第一…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉