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/". Должен быть/как последний символ, чтобы он работал.