您需要将基本 URL 传递给setEndpoint(...)
并定义/repos/...
在您的服务界面中。
一个快速演示:
class Contributor {
String login;
@Override
public String toString() {
return String.format("{login='%s'}", this.login);
}
}
interface GitHubService {
@GET("/repos/{organization}/{repository}/contributors")
List<Contributor> getContributors(@Path("organization") String organization,
@Path("repository") String repository);
}
然后在你的代码中,你这样做:
GitHubService service = new RestAdapter.Builder()
.setEndpoint("https://api.github.com")
.build()
.create(GitHubService.class);
List<Contributor> contributors = service.getContributors("square", "retrofit");
System.out.println(contributors);
这将打印:
[{login='JakeWharton'}, {login='pforhan'}, {login='edenman'}, {login='eburke'}, {login='swankjesse'}, {login='dnkoutso'}, {login='loganj'}, {login='rcdickerson'}, {login='rjrjr'}, {login='kryali'}, {login='holmes'}, {login='adriancole'}, {login='swanson'}, {login='crazybob'}, {login='danrice-square'}, {login='Turbo87'}, {login='ransombriggs'}, {login='jjNford'}, {login='icastell'}, {login='codebutler'}, {login='koalahamlet'}, {login='austynmahoney'}, {login='mironov-nsk'}, {login='kaiwaldron'}, {login='matthewmichihara'}, {login='nbauernfeind'}, {login='hongrich'}, {login='thuss'}, {login='xian'}, {login='jacobtabak'}]
我们可以将可变参数(非最终)传递给 Retrofit @GET 或 @POST 注释吗?
不可以,(Java) 注释内的值必须声明为最终值。然而,你can定义变量路径,如我在演示中所示。
EDIT:
请注意杰克在评论中的评论:
值得注意的是,原始问题中链接的代码处理您通过时的情况https://api.github.com/ https://api.github.com/(注意尾部斜杠)并且它被连接到 /repos/... (注意前导斜杠)。 Retrofit 会在相对 URL 注释参数上强制使用前导斜杠,因此如果 API url 上有尾随斜杠,则会进行重复数据删除。