如何为改进的POST调用设置动态端点?

时间:2016-12-13 14:50:37

标签: android rest retrofit

我从服务器收到(步骤1)一个soapString,我想将(步骤2)此字符串转发给另一台服务器。

public interface StepTwoRestAdapter {
        @Headers({"Content-Type:text/xml"})
        @POST("/services/step2/forwardSoap")
        Observable<String> order(@Body SoapString soapString);
}

在上面的这种情况下,afgter my.server.com即“/ webservices / step2 / forwardSoap”始终是常量。如何使这部分变量?

这里的技巧是,在第一个响应的响应中指定第二个服务器(用于步骤2)。

编辑: 现在,我使用@Tabish Hussain的提案

public interface StepTwoRestAdapter {
    @Headers({"Content-Type:text/xml"})
    @POST("/{urlPath}")
    Observable<String> order(@Body SoapString soapString, @Path("urlPath") String urlPath);

}

然后我打电话

 restAdapter.create(StepTwoRestAdapter.class).order(new TypedString(soapString), uriPath)

而我的uriPath是“services / step2 / forwardSoap”

但改装然后调用: https://my.server.com/services%2Fstep2%2FforwardSoap

正如您所见,'/'被“%2F”取代

2 个答案:

答案 0 :(得分:3)

这样做

public interface StepTwoRestAdapter {
    @Headers({"Content-Type:text/xml"})
    @POST("/services/{soapString}/forwardSoap")
    Observable<String> order(@Path("soapString") SoapString soapString);
}

答案 1 :(得分:2)

检查此链接,您应该可以在那里找到答案:

https://futurestud.io/tutorials/retrofit-2-how-to-use-dynamic-urls-for-requests https://futurestud.io/tutorials/retrofit-2-how-to-change-api-base-url-at-runtime-2

我认为最简单的方法是:

public interface StepTwoRestAdapter {
    @Headers({"Content-Type:text/xml"})
    @POST
    Observable<String> order(@Url String url, @Body SoapString soapString);
}

如果您使用的是Retrofit 1,请检查以下内容:

https://medium.com/@kevintcoughlin/dynamic-endpoints-with-retrofit-a1f4229f4a8d#.7atwl0o3t