【问题标题】:Declaring a retrofit REST endpoint with constant query value声明具有恒定查询值的改造 REST 端点
【发布时间】:2014-07-27 04:30:48
【问题描述】:

所以我想获取 youtube 视频的元数据(比如这个:https://www.youtube.com/watch?v=qlTA3rnpgzU)。

我将对其进行编码并将其包装在另一个网址中,如下所示:http://www.youtube.com/oembed?url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DqlTA3rnpgzU&format=json

我的接口定义如下所示:

public interface YoutubeApi {
    @GET ("oembed") 
    YoutubeMetaData metaData (@Query (QUERY_VIDEO_URL) final String url,
                              @Query(QUERY_FORMAT) final String alwaysJson);
}

这一切都很好,但我不想在此处指定除 JSON 之外的任何格式(format=json 是此 url 的固定部分)。

有没有办法在我的接口声明中指定这一点并将我的接口简化为:

public interface YoutubeApi {
    @GET ("oembed") 
    @Magic ("format=json")
    YoutubeMetaData metaData (@Query (QUERY_VIDEO_URL) final String url);
}

谢谢。

【问题讨论】:

    标签: java retrofit


    【解决方案1】:

    直接放在相对网址中即可:

    public interface YoutubeApi {
      @GET("oembed?format=json") 
      YoutubeMetaData metaData(@Query(QUERY_VIDEO_URL) String url);
    }
    

    【讨论】:

    • 在 Retrofit 1 中,我们可以使用 @QueryParam 注解 @GET("endpoint") @QueryParam(name="constantVariable", value="constantValue") void normalGet(@Named("page") int 页面,Callback 回调);参考:JakeWharton 的评论github.com/square/retrofit/issues/103#issuecomment-10738504
    • @nizam.sp 这个还是比较简单的。
    【解决方案2】:

    在kotlin中可以指定默认参数:

    interface YoutubeApi {
    
        @GET ("oembed") 
        suspend fun metaData (
            @Query (QUERY_VIDEO_URL) url: String,
            @Query(QUERY_FORMAT) alwaysJson: String = "json"
        ): Response<YoutubeMetaData>
    
    }
    

    【讨论】:

      猜你喜欢
      • 2014-08-18
      • 1970-01-01
      • 1970-01-01
      • 2021-05-02
      • 2020-01-21
      • 2020-12-12
      • 2018-06-24
      • 1970-01-01
      • 2011-12-31
      相关资源
      最近更新 更多