You need to enable JavaScript to run this app. 使用Retrofit2发送GET请求返回404但Postman调用正常,附代码求排查
优惠活动
大模型
产品
解决方案
定价
更多

使用Retrofit2发送GET请求返回404但Postman调用正常,附代码求排查

Retrofit2发GET请求返回404但Postman调用正常的排查方向与解决方法

核心排查思路

你已经开启了HttpLoggingInterceptor.Level.BODY的日志级别,直接在Logcat中找到Retrofit打印的完整请求行、请求头信息,和Postman里调用成功的请求参数逐字符对比,哪部分不一致就针对性修正,这是最高效的排查方式。

常见成因及对应解决

  • 路径拼接规则踩坑
    Retrofit的baseUrl与接口注解路径有严格的拼接逻辑,写错就会导致最终请求URL和预期不一致:
    • 接口@GET注解的路径开头不带斜杠时,会自动拼接到baseUrl末尾。比如当前baseUrl为http://localhost/baseurl/v1/,注解路径写org/info,最终URL为http://localhost/baseurl/v1/org/info,符合预期。
    • 接口@GET注解的路径开头带斜杠时,会直接从主机根路径开始拼接。比如注解路径写/org/info,最终URL会变成http://localhost/org/info,直接丢失baseUrl中baseurl/v1的路径段,必然触发404。
      解决方法:检查ApiInterface中接口方法的@GET注解写法,去掉路径开头多余的斜杠,保证拼接后的最终路径和Postman调用的URL完全一致。
  • localhost地址在移动端的映射错误
    Postman运行在本地电脑上,用localhost指向本机后端服务是正常的;但移动端(无论真机还是模拟器)的localhost指向的是设备本身,而非运行后端服务的电脑,自然无法请求到接口,返回404。
    解决方法:
    • 安卓模拟器调试场景:把baseUrl里的localhost替换为模拟器专属的宿主机映射地址10.0.2.2
    • 真机调试场景:把baseUrl里的localhost替换为运行后端服务的电脑的局域网IP(例如192.168.x.x),保证设备和电脑处于同一局域网可正常互通。
  • 接口方法的参数注解配置错误
    检查ApiInterface中getOrgInf方法的注解定义,确认传入参数的使用方式正确:
    • 传入的headers请求头Map,必须搭配@HeaderMap注解使用,否则clientkey请求头不会被携带到请求中
    • 传入的orgid如果是路径占位符,必须搭配@Path注解;如果是查询参数,必须搭配@Query注解,漏写注解会导致参数无法拼接到请求URL的对应位置,最终路径与预期不符触发404
      解决方法:对照Postman中的请求参数位置,修正接口方法的注解配置,保证参数传递的位置和Postman完全一致。
  • 路径编码不匹配
    如果orgid包含特殊字符(空格、中文、特殊符号),Retrofit默认的路径编码规则和服务端要求的不匹配时,会导致最终拼接的路径和Postman手动构造的路径不一致,触发404。
    解决方法:对比日志中打印的请求URL和Postman的URL,确认特殊字符的编码结果一致,必要时给@Path注解增加encoded = true参数,手动完成正确编码后再传入参数。
  • 服务端路由的请求头校验规则
    部分服务端会配置路由前置校验,如果请求缺少指定的请求头,不会返回401未授权,而是直接返回404避免暴露接口存在性。可以对比日志中的请求头和Postman的请求头,确认是否有遗漏的头字段,或是拦截器添加的Authorization头格式不符合服务端要求。

内容的提问来源于stack exchange,提问作者Saurabh Sahdev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.23 03:06:04