android - 如何使用 Retrofit 将这个 Api URL 映射到“?”之后的这些“{parameter}” 询问
问题描述
很抱歉无法通过问题标题来表达我的意思。
如何使用 Retrofit 映射此 URL 的参数?
/aaapi.cgi?q={query}-!{syear},{eyear}-!{snfrate},{enfrate}-!{simdbrate},{eimdbrate}-!{genreid}-!{vtype}-!{audio}-!{subtitle}-!{imdbvotes}-!{downloadable}&t=ns&cl={clist}&st=adv&ob={sortby}&p={page}&sa={andor}
I tried to use @Path to replace this "{value}" where there is not an actual "Query" parameter like q={query}.
@Headers(
value = ["Accept: application/json", "X-Mashape-Key: xxxxx"])
@GET(
"/aaapi.cgi-!{syear},{eyear}-!{snfrate},{enfrate}-!{simdbrate},{eimdbrate}-!{genreid}-!{vtype}-!{audio}-!{subtitle}-!{imdbvotes}-!{downloadable}-!cl={clist}-!ob={sortby}-!p={page}")
fun search(
@Path("syear") startYear: String = "1970",
@Path("eyear") endYear: String = "2019",
@Path("snfrate") startNetflixRate: String = "0",
@Path("enfrate") endNetflixRate: String = "5",
@Path("simdbrate") startImdbRate: String = "0",
@Path("eimdbrate") endImdbRate: String = "10",
@Path("genreid") genreId: String = "0",
@Path("vtype") videoType: String = "Movie",
@Path("audio") audio: String = "Any",
@Path("subtitle") subtitle: String = "Any",
@Path("imdbvotes") imdbVotes: String = "1000",
@Path("downloadable") downloadable: String = "",
@Path("clist") countryList: String = "29",
@Path("sortby") sortBy: String = "Date",
@Path("page") page: String = "1",
@Query("q") query: String = "get:new7",
@Query("t") type: String = "ns",
@Query("st") st: String = "adv",
@Query("sa") andOr: String = "and"
): Call<SearchResponse>
但当然它一定是不正确的,因为它会生成这个错误的 url:
https://unogs-unogs-v1.p.mashape.com/aaapi.cgi-!1970,2019-!0,5-!0,10-!0-!Movie-!Any-!Any-!1000-!-!cl=29-!ob=Date-!p=1?q=get%3Anew7&t=ns&st=adv&sa=and
这是一个返回正确 json 文件的有效 url:
https://unogs-unogs-v1.p.mashape.com/aaapi.cgi?q=get%3Anew7-!1900,2018-!0,5-!0,10-!0-!Any-!Any-!Any-!gt100-!Yes&t=ns&cl=all&st=adv&ob=Relevance&p=1&sa=an
编辑
它适用于:
@GET(
"/aaapi.cgi"
)
fun search(
@Query("q", encoded = true) query: String = "get:new7",
@Query("t") type: String = "ns",
@Query("st") st: String = "adv",
@Query("ob") orderBy: String = "Date",
@Query("sa") andOr: String = "and"
): Call<SearchResponse>
并按照建议传递整个查询:
service.search(
query = "new:7-!1900,2018-!0,5-!0,10-!0-!Any-!Any-!Any-!gt100-!Yes",
type = "ns",
st = "adv",
orderBy = "Relevance",
andOr = "and"
)
解决方案
如果没有示例,则不清楚预期的输出应该是什么。并且分配值通常是一个坏主意,以防它可能打算根据用户输入替换这些值。定义的字段比 URL 多得多;例如,字段q
是这里的整个字符串:
?q={query}-!{syear},{eyear}-!{snfrate},{enfrate}-!{simdbrate},{eimdbrate}-!{genreid}-!{vtype}-!{audio}-!{subtitle}-!{imdbvotes}-!{downloadable}
这些@Query
字段就足够了,不需要@Path
参数:
@Headers(value = ["Accept: application/json", "X-Mashape-Key: xxxxx"])
@GET("aaapi.cgi")
fun getResults(
@Query(value = "q") queryString: String,
@Query(value = "t") type: String,
@Query(value = "st") st: String,
@Query(value = "sa") andOr: String
): Call<SearchResponse>
推荐阅读
- onelogin - React Native 移动应用 OneLogin 配置
- function - 为什么 GGIR R 代码需要很长时间才能运行?
- python - 如何在 Flask 中的 send_from_directory 之后删除文件?
- python - 我可以使用 python 来简化涉及所有列的 SQLite 查询吗?
- javascript - 连接这两个字符串如何导致这个结果?
- azure - 使用 Azure Pipelines 在虚拟机规模集上进行 Azure Python 函数分解
- python - 由于缺少存根文件,Sphinx 没有迭代 .rst 文件
- api - 如何获取 facebook webhook 请求的静态 IP/域
- vba - (SQL Like 语句) + (ACCESS Combobox IMPUT) + (ACCESS SubFormulary OUTPUT)
- python - 如何将噪声签名/配置文件/指纹/PRNU 应用于新图像?