我正在使用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/