You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Retrofit传递参数问题:通过post-id获取单篇文章失败

解决Retrofit调用WordPress REST API获取单篇文章的ID传递问题

首先,我们先梳理你遇到的核心问题:你的原始请求是通过rest_route查询参数指定API路径,传递文章ID时参数格式不匹配导致请求失败。先逐个分析你尝试的代码问题:


你之前尝试的写法错误点

  • @FieldMap/@Field 用于GET请求:@Field和@FieldMap是专门为POST请求的表单提交设计的,GET请求完全不支持这类注解,所以这几种写法从根本上就错了。
  • @QueryMap 的用法不符合需求:你的@GET("?rest_route=/wp/v2/posts/")加上@QueryMap会生成类似?rest_route=/wp/v2/posts/&postid=xxx的请求,但你的原始需求是把ID放在rest_route的路径里(即rest_route=/wp/v2/posts/3561),所以这种写法生成的URL和目标不匹配。
  • @Path 的写法理论可行,但可能存在细节问题:你写的@GET("?rest_route=/wp/v2/posts/{postid}")其实逻辑上是对的,但如果没生效,可能是Retrofit的配置问题,或者你的SinglePost数据模型和API返回的JSON结构不匹配。

两种正确的实现方案

方案1:沿用你的rest_route查询参数风格

直接让Retrofit替换rest_route路径里的ID占位符,写法如下:

// 注意baseUrl要设置为你的域名:https://www.mywordpress.com/
@GET("?rest_route=/wp/v2/posts/{postId}")
Call<SinglePost> getSinglePost(@Path("postId") int postId);

调用时直接传入文章ID即可,比如getSinglePost(3561),Retrofit会自动生成和你原始链接完全一致的URL。

方案2:使用WordPress API的干净路径风格(推荐)

如果你的WordPress站点开启了固定链接(Permalinks),可以直接用更简洁的路径式API,不需要rest_route参数:

// baseUrl设置为https://www.mywordpress.com/
@GET("wp/v2/posts/{postId}")
Call<SinglePost> getSinglePost(@Path("postId") int postId);

这种写法更符合RESTful风格,生成的URL是https://www.mywordpress.com/wp/v2/posts/3561,和官方推荐的调用方式一致。


额外排查点

如果按照上面的写法还是没得到正确响应,建议检查:

  • 确认你的SinglePost数据模型的字段和WordPress API返回的JSON结构完全匹配(比如是否遗漏了嵌套对象、字段名大小写是否一致)。
  • 检查Retrofit初始化时是否添加了Gson转换器(用于解析JSON):
    Retrofit retrofit = new Retrofit.Builder()
        .baseUrl("https://www.mywordpress.com/")
        .addConverterFactory(GsonConverterFactory.create())
        .build();
    
  • 确认你的APP已经申请了网络权限(AndroidManifest.xml里添加<uses-permission android:name="android.permission.INTERNET"/>)。

内容的提问来源于stack exchange,提问作者Ali Akkawi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:04:30