Допустим ли такой URL-адрес?
http://baseurl.com/php/project/?sign.get?&site=my_site&time=1538755984978&secretkey=site_secret_key
Сразу после второго знака вопроса стоит знак &, но теоретически сервер все еще должен его прочитать.Если да, вы можете сделать это просто так:
@GET("/php/project/?sign.externalGetToken?")
Или вы также можете попробовать так:
@GET("/php/project/?sign.externalGetToken")
fun getAuthToken(
@Query(value = "?site", encoded = true) site: String, // encoded ensure that retrofit doesn't encode the ? into '%3F'
@Query("time") time: String,
@Query("secretkey") secretKey: String
): Call<TokenResponse>
, что приведет к
http://baseurl.com/php/project/?sign.get&?site=my_site&time=1538755984978&secretkey=site_secret_key
& будет на этот раз до вопросительного знака, но не уверен, будет ли он работать.Также это второе решение требует, чтобы вы никогда не передавали значение null для параметра site вашего вызова, иначе «? Site» просто не будет напечатан.
В качестве крайней меры, если ничего из вышеперечисленного не работает, вы можете попробоватьиспользовать вместо аннотации @Url от модернизации.Кажется, это немного противоречит использованию сервисного интерфейса, если вы спросите меня, но, по крайней мере, он должен работать.Просто замените ваше объявление следующим:
@GET
fun getAuthToken(
@Url url: String,
@Query("time") time: String,
@Query("secretkey") secretKey: String
): Call<TokenResponse>
, затем просто назовите его следующим образом:
service.getAuthToken("/php/project/?sign.externalGetToken?site="+ yourSite, yourTimeString, yourSecretKey");
, и вы получите URL, который хотите.Но для этого необходимо всегда отправлять URL в качестве параметра.