2016-04-26 19 views
0

我正在使用retrofit2與webapi交流。 我需要設置動態beacuase用戶可以改變它的WebAPI的URL,所以我用了@Url註解像這樣指定它:將@Path和@Url參數與retrofit2結合使用

@POST 
Call<LoginResponse> login(@Url String url, @Body LoginRequest user); 

在操作中的一個,我需要發送一些路徑參數到服務器,所以我這樣做:

@GET 
Call<DataResponse> getOrder(@Url String url, 
          @Header(WEBAPI_EMAIL_HEDER) String email, 
          @Header(WEBAPI_TOKEN_ID_HEDER) String token, 
          @Path("id") int id); 

當我打電話的操作getOrder(...),作爲例外retrofit惜售因爲我不是suppoused在相同的操作使用@Url@Path參數。

這是例外:

java.lang.IllegalArgumentException: @Path parameters may not be used with @Url. (parameter #4) 

一種解決方法是更換URL中的id參數,並在invokation只使用@Url參數。但我認爲這不是最好的方法,因爲我會在@Path參數的所有操作中完成此操作。

還有其他更清潔的解決方案嗎?也許使用另一個retrofit2註釋?

在此先感謝。

+1

如果您希望使用Path註解,則必須配置翻新以使用端點URL。在上面的例子中,翻新將不知道在哪裏放置id,因爲它沒有在GET描述中定義 – AgileNinja

+0

我用這個url參數值調用:「http://webapi.example.com/v1/orders/{id }以.json」。所以,url有定義的id參數。 – Pablo

回答

1

如後Retrofit 2 - Dynamic URL所述,@Url表示法假定該字符串是完全定義的URL,並且不檢查它是否包含@Path變量。

要使用@Path註釋,您必須配置一個端點URL並在@GET()註釋中包含@Path變量。