我可以同时发布 Retrofit @Path 和 @Field 吗?
Posted
技术标签:
【中文标题】我可以同时发布 Retrofit @Path 和 @Field 吗?【英文标题】:Can i post Retrofit @Path and @Field in the same time? 【发布时间】:2016-06-07 21:42:21 【问题描述】:我尝试发帖
public interface Service
@FormUrlEncoded
@POST("/mobile/seeker/Search/JobsInCompany/id")
Call<retrofit_companyList.Contributor> JobBKK_POST (@Path("id") String IdCompany,
@Field("token") String token,
@Field("page") String page);
StartRetrofit()
Retrofit_Build Build = new Retrofit_Build();
Service connect = Build.retrofit.create(Service.class);
Call<retrofit_companyList.Contributor> call = connect.POST(
IDCompany,
Token,
Integer.toString(Page)
);
call.enqueue(new Callback<retrofit_companyList.Contributor>()
@Override
public void onResponse(Response<retrofit_companyList.Contributor> response, Retrofit retrofit) ...
@Override
public void onFailure(Throwable t)
Log.e(TAG, "Retrofit Fail : " + t.toString());
);
然后是日志
D/OkHttp: --> POST /mobile/sample/JobsInCompany/50357 HTTP/1.1
D/OkHttp:token=XXXXX & page=1
D/OkHttp: --> END POST (45-byte body)
D/OkHttp: --> POST /mobile/sample/JobsInCompany/HTTP/1.1
D/OkHttp:token=XXXXX & page=1
D/OkHttp: --> END POST (45-byte body)
D/OkHttp:
D/OkHttp:服务器:nginx
V/Fragment_choose_company:改造成功可运行:总列表:11
V/Fragment_choose_company:Retrofit Success Runnable:RTC company,co 和https://XXX/images/503571.jpg
V/Fragment_choose_company:改造成功可运行:总列表:20
V/Fragment_choose_company: Retrofit Success Runnable : null and null
这是我只被叫过一次的问题。但改造发布了 2 次,数据响应为空
【问题讨论】:
【参考方案1】:TL;DR
是的,但如您所见,它会导致逻辑错误。
正如您在日志中看到的,改造已发布 2 次。但结果并不完全符合您的预期
原因:
1.html 表单使用两种 MIME 类型:
application/x-www-form-urlencoded
多部分/表单数据
2.改造中:
@Field:表示表单编码请求的命名对
@Part:表示多部分请求的单个部分
所以 Retrofit 了解您想要创建 2 个 POST 请求:表单编码和多部分。这就解释了为什么您在日志中看到它发布了两次。
【讨论】:
【参考方案2】:@NguyenDat 解释了为什么你不能使用它。我有同样的问题。我试过两个@Path。同样的问题。
对我来说解决的问题是:@Path 和 @Query 组合。
【讨论】:
以上是关于我可以同时发布 Retrofit @Path 和 @Field 吗?的主要内容,如果未能解决你的问题,请参考以下文章
【Android】Retrofit网络请求参数注解,@Path、@Query、@QueryMap...