我可以同时发布 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 吗?的主要内容,如果未能解决你的问题,请参考以下文章

Retrofit的使用

Retrofit网络框架介绍

【Android】Retrofit网络请求参数注解,@Path、@Query、@QueryMap...

使用 Retrofit 的批量请求

如何在Activity中使用Retrofit和RxJava / RxAndroid处理旋转?

如何在Retrofit中同时解析多种数据格式