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

通过Retrofit2从MySQL获取分类数据时遇@Field参数错误求助

解决Retrofit2中"@Field parameters can only be used with form encoding"错误

这个错误的根源很明确:你把用于POST表单提交的@Field注解,和GET请求的@GET注解混用了,这俩根本不兼容,Retrofit直接给你抛出了这个提示。

下面给你两种针对性的修复方案,你可以根据后端接口的实际情况选择:

方案一:改用POST表单请求(适合后端接收POST表单数据的场景)

如果你的后端接口是通过POST表单来接收catId参数的,那你需要给接口方法加上@FormUrlEncoded注解,同时把@GET改成@POST,这样@Field就能正常工作了:

public interface APIService {
    @FormUrlEncoded
    @POST("fetchtext.php")
    Call<List<DataStored>> savePost(@Field("catId") String catId);

    // 对应的searchcategory方法也做同样修改
    @FormUrlEncoded
    @POST("testing.php")
    Call<List<DataStored>> searchcategory(@Field("catId") String catId);
}

@FormUrlEncoded的作用是告诉Retrofit将请求体编码成application/x-www-form-urlencoded格式,这时候@Field定义的参数会被正确封装成表单字段。

方案二:保留GET请求(适合后端通过URL查询参数接收数据的场景)

如果你的后端接口原本就是GET类型,通过URL末尾的查询参数来接收catId,那你应该把@Field换成@Query注解,这才是GET请求传递参数的正确方式:

public interface APIService {
    @GET("fetchtext.php")
    Call<List<DataStored>> savePost(@Query("catId") String catId);

    // searchcategory方法同理修改
    @GET("testing.php")
    Call<List<DataStored>> searchcategory(@Query("catId") String catId);
}

用@Query的话,Retrofit会自动把catId拼接到URL后面,最终请求的URL会变成类似fetchtext.php?catId=你的分类ID的形式,完全符合GET请求的参数传递规范。

最后提醒一句:一定要确保你的接口请求方式和后端实际提供的接口类型一致,不然还是会出问题哦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:52:40