我用来retrofit2与 webapi 进行通信。我需要动态设置 webapi 的 URL,因为用户可以更改它,所以我使用注释@Url来指定它,如下所示:
@POST
Call<LoginResponse> login(@Url String url, @Body LoginRequest user);
Run Code Online (Sandbox Code Playgroud)
在其中一项操作中,我需要向服务器发送一些路径参数,所以我这样做:
@GET
Call<DataResponse> getOrder(@Url String url,
@Header(WEBAPI_EMAIL_HEDER) String email,
@Header(WEBAPI_TOKEN_ID_HEDER) String token,
@Path("id") int id);
Run Code Online (Sandbox Code Playgroud)
当我调用该操作时getOrder(...),会引发异常,retrofit因为我不应该在同一操作中使用@Url和参数。@Path
这是例外:
java.lang.IllegalArgumentException: @Path parameters may not be used with @Url. (parameter #4)
Run Code Online (Sandbox Code Playgroud)
一种解决方案是替换 url 上的 id 参数并仅使用@Url调用中的参数。但我认为这不是最好的方法,因为我将对所有带有@Path参数的操作执行此操作。
还有其他更清洁的解决方案吗?也许使用另一个retrofit2注释?
提前致谢。
小智 6
如《Retrofit 2 - 动态 URL》一文中所述,该@Url表示法假定 String 是完全定义的 URL,并且不检查它是否包含@Path变量。
要使用@Path注释,您必须配置端点 URL 并将变量包含@Path在@GET()注释中。
| 归档时间: |
|
| 查看次数: |
5886 次 |
| 最近记录: |