Java.lang.IllegalArgumentException: baseUrl должен завершаться/пока используется модификация 2.1.0 для метода GET
Я использую Retrofit2 для разбора API.
При использовании retrofit1.9.0
работают как методы post, так и get. Но используя retrofit 2.1.0
, в методе get возникает ошибка:
java.lang.IllegalArgumentException: baseUrl должен заканчиваться на /
Я проверил свой код и нет проблем, он работает для метода post.
Retrofit retrofit= new Retrofit.Builder()
.baseUrl("sample.com/ecomtest/index.php?route=api/")
.addConverterFactory(GsonConverterFactory.create())
.build();
Ответы
Ответ 1
'?' не может в baseUrl, вы должны перенести его в интерфейс API. как это.
Полный URL: https://free-api.heweather.com/v5/now?
city=yourcity&key=yourkey
поэтому baseUrl = "https://free-api.heweather.com/v5/"
и интерфейс API
@GET("now?")
Observable<HeWeather5> getNowWeather(@Query("city") String city,@Query("key") String key);
Ответ 2
URL, который вы передали как API_BASE_URL
, должен заканчиваться на "/", поэтому добавьте его в конец вашего URL.
Retrofit.Builder builder =
new Retrofit.Builder()
.baseUrl(API_BASE_URL)
.addConverterFactory(GsonConverterFactory.create());
где
String API_BASE_URL = "http://www.domain.com/"; //string end with "/"
он будет работать.
Ответ 3
В модификации вы не можете использовать конечные точки, такие как "некоторые"? в базовом URL.
Разделите свой URL как
String url="http://sample.com/ecomtest/index.php?route=api/";
String baseUrl=url.split(".com/")[0]+".com/";
String queryUrl=url.split(".com")[1];
затем используйте
Retrofit.Builder builder =
new Retrofit.Builder()
.baseUrl(baseUrl)
.addConverterFactory(GsonConverterFactory.create());
и передать конечную точку в качестве пути к методу запроса, например
@GET("{endpoint}")
Call<Response> getData(@Path("endpoint") String endpoint);
и сделано
Ответ 4
Предположим, что ваш url " https://yourapi.com/abc?def&key=123"
Разделите свой URL на две части.
String baseURL ="https://yourapi.com/"; //make sure you have '/' at the end
String key = "123";
затем добавьте остальную часть в аннотацию GET, подобную этой @GET("abc?def&key="+key)
Ответ 5
Была такая же ситуация и ответы здесь почти охватывают/объясняют решение.
Однако не совсем так.
Я пытался сохранить BASE_URL
так: sample.com/api
И мои конечные точки будут для e.x: /users
Решение с добавлением /
не помогло: sample.com/api/
Проблема с более чем одним /
в BASE_URL
, и я думаю, что модернизация сводит с ума из-за того, что косая черта не только как конечная метка.
Единственное решение, которое сработало: sample.com/
И конечной точкой для этого будет: api/users
Таким образом, для меня решение было сохранить только один /
в BASE_URL, и оставить его в конце строки основного URL
Ответ 6
Я решил эту ошибку с помощью URL = "URL/"
. Должен быть/как последний символ, чтобы он работал.