6

我在大多数调用中都使用 Retrofit,但在其中一种情况下,我在参数中提供了完整路径。我的网址是这样的http://www.example.com/android.json。此 URL 已完整提供,因此我必须在运行时对其进行路径。我按照这里的建议实现端点 https://medium.com/@kevintcoughlin/dynamic-endpoints-with-retrofit-a1f4229f4a8d@GET我需要能够将@GET(""). 这不起作用,因为我收到一条错误消息,说我应该至少提供一个“/”。

如果我添加斜杠,则 URL 变为http://www.example.com/android.json/并且它不起作用,服务器返回禁止。我还尝试创建一个GET类似于此处的自定义界面https://github.com/square/retrofit/issues/458GET在界面中提供和不提供值方法。然后我得到另一个错误,说缺少值。

基本上我需要能够提供一个空值或空值,但改造不允许这样做。我该如何解决这个问题?现在我正在手动执行 JSON 请求,但有没有一种方法可以在这种情况下使用改造?我需要传递完整的 URL,我无法做到端点http://www.example.com@GET("/android.json"). 谢谢

4

3 回答 3

20

您可以使用@GET(".")来指示您的 url 与基本 url 相同。

@GET(".")
Observable<Result> getData(@Query("param") String parameter);
于 2019-01-22T20:08:47.437 回答
2

我已经尝试过这种方法,但对我不起作用。

此问题的解决方法是:

//Retrofit interface
public interface TestResourceClient {
    @GET
    Observable<Something> getSomething(@Url String anEmptyString);
}

//client call
Retrofit.Builder().baseUrl("absolute URL").build()
.create(TestResourceClient.class).getSomething("");

此解决方案的缺点是您必须在getSomething("")方法调用中提供空字符串。

于 2017-01-26T16:08:05.960 回答
0

我在 Retrofit 2 中遇到了同样的问题。使用@GET,@GET("")@GET(".")没有解决我的问题。

根据官方文档你可以baseUrl@GET参数一样。

端点值可能是完整的 URL。

具有主机的值替换 baseUrl 的主机,并且值也具有方案替换 baseUrl 的方案。
基本 URL:http://example.com/
端点:https://github.com/square/retrofit/
结果:https://github.com/square/retrofit/

所以在我的情况下:

interface MyAPI {
    @GET("http://www.omdbapi.com/")
    suspend fun getMovies(
        @Query("apikey") apikey: String,
        @Query("s") s: String
    ): Response<MoviesResponse>

    companion object {
        operator fun invoke(): MyAPI {
            return Retrofit.Builder()
                .addConverterFactory(GsonConverterFactory.create())
                .baseUrl("http://www.omdbapi.com/")
                .build()
                .create(MyAPI::class.java)
        }
    }
}
于 2020-09-01T14:26:04.993 回答