我正在使用retrofit2与webapi通信。
我需要动态设置webapi的URL,因为用户可以更改它,因此我使用@Url批注来指定它,如下所示:

@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会引发异常,因为我不建议在同一操作中使用@Url@Path参数。

这是例外:

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


一种解决方案是替换URL上的id参数,并仅在调用中使用@Url参数。但是我认为这不是最好的方法,因为我将对所有使用@Path参数的操作执行此操作。

还有其他更清洁的解决方案吗?也许使用另一个retrofit2注释?

提前致谢。

最佳答案

如文章Retrofit 2 - Dynamic URL中所述,@Url表示法假定String是完全定义的URL,并且不检查其是否包含@Path变量。

要使用@Path批注,必须配置终结点URL,并将@Path变量包括在@GET()批注内。

关于android - 结合使用@Path和@Url参数和retrofit2,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36876282/

10-14 17:33
查看更多