retrofit 是 square 开源的网络库,非豆包ai所写;其 baseurl 必须以斜杠结尾,否则拼接路径导致 404;restful 注解需按语义选用;gson 解析失败多因泛型声明或配置不当;okhttpclient 需单独配置超时、日志、拦截器等。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

为什么 Retrofit.Builder().baseUrl() 必须以斜杠 / 结尾
这是最常导致 404 的隐形陷阱。Retrofit 拼接 URL 时不做智能补全,而是直接字符串拼接:baseUrl + @GET("users") → 如果 baseUrl 是 "https://api.example.com/v1"(缺末尾 /),结果就是 "https://api.example.com/v1users",路径断裂。
- 正确写法:
.baseUrl("https://api.example.com/v1/")(结尾带 /) - 开发期建议用
BuildConfig或gradle.properties管理多环境 Base URL,避免硬编码 - 测试时可用
MockWebServer验证最终发出的请求 URL 是否符合预期
@GET、@POST、@PUT 这些注解到底怎么选
不是“能用 POST 就不用 PUT”,RESTful 设计直接影响服务端幂等性、缓存行为和前端容错能力。
-
@GET:只用于查询,无请求体,可被浏览器/CDN 缓存;参数走 URL(@Query)或路径(@Path) -
@POST:创建资源,非幂等;有请求体(@Body或@FormUrlEncoded+@Field) -
@PUT:完整替换某资源(如更新用户全部字段),幂等;通常也带@Body -
@PATCH:局部更新(如只改头像),更轻量;服务端需明确支持,否则 fallback 到 PUT - 别用
@HTTP(method = "post", ...)替代标准注解——除非你要发 TRACE/OPTIONS 这类冷门方法
GsonConverterFactory.create() 为什么有时解析失败
表面是“JSON 转 POJO 失败”,实际根因往往在类型声明或 Gson 配置不匹配。
- 返回类型必须是具体泛型,比如
Call<baseresult>></baseresult>,不能写成Call<object></object>—— Gson 无法推断嵌套泛型结构 - POJO 字段名与 JSON key 不一致?加
@SerializedName("user_name"),别依赖默认映射 - 空值字段导致解析崩溃?在
GsonConverterFactory.create()前传入自定义Gson实例:new GsonBuilder().nullSafe().create() - 遇到
Expected BEGIN_OBJECT but was STRING?检查接口是否偶尔返回字符串错误(如 "token expired"),这种混合响应需统一用ResponseBody手动处理
OkHttpClient 为什么要单独配置再传给 Retrofit
Retrofit 本身不发请求,它只是把接口调用翻译成 okhttp3.Call;真正干活的是你传进去的 OkHttpClient。绕过它等于放弃所有底层控制权。
立即进入“豆包AI人工智官网入口”;
立即学习“豆包AI人工智能在线问答入口”;
- 超时必须设:默认 10 秒太短,弱网下极易失败;推荐
connectTimeout(15, TimeUnit.SECONDS)+readTimeout(30, TimeUnit.SECONDS) - 日志拦截器(
HttpLoggingInterceptor)只应在 debug 模式启用,否则泄露敏感字段 - 需要 Token 自动注入?写个
Interceptor在request.newBuilder().addHeader("Authorization", "Bearer xxx") - 别重复 new OkHttpClient() —— 它是线程安全的,全局单例复用连接池,否则会耗尽 socket
CallAdapter。真要稳定,就得清楚每一层谁在做什么。











