Retrofit выдает ошибку IllegalArgumentException URL query string must not have replace block

396
25 июля 2017, 17:17
FATAL EXCEPTION: main
                                                                                  Process: com.riyadbankacademy.general_portals, PID: 26644
                                                                                  java.lang.IllegalArgumentException: URL query string "type=portals/{portalNamePath}/contact_us&content[submit]=submit" must not have replace block. For dynamic query parameters use @Query.

Мой код

@POST("v2/message/email?type=portals/{portalNamePath}/contact_us&content[submit]=submit")
Call<SendMailStatus> sendMail(@Query("content[name]") String name,
                              @Path("portalNamePath") String portalNamePath,
                              @Query("content[portal]") String portalNameContent,
                              @Query("content[email]") String email,
                              @Query("content[subject]") String subject,
                              @Query("content[message]") String message);

А так выглядит функция запроса.

public static void sendMail(Context context, String name, String email, String subject, String message,String portalNamePath,String portalNameContent) {
    KnowledgeCityApi knowledgeCityApi = ApiMethods.createKnowledgeCityApi();
    if (knowledgeCityApi != null) {
        Call call = knowledgeCityApi.sendMail(name, portalNamePath, portalNameContent, email, subject, message);
        Log.d(TAG, "sendMail: " + call.request().toString());
        ApiMethods.makeRequest(call, Messages.RESPONSE_SEND_MAIL);
    }
}
Answer 1

В запросе всё, что идёт после ? - параметры запроса в виде key=value.

Т.е. всё, что после ? не является частью пути и использовать @Path нельзя, надо использовать @Query.

В вашем случае надо как-то так:

@POST("v2/message/email?content[submit]=submit")
Call<SendMailStatus> sendMail(@Query("content[name]") String name,
                          @Query("type") String portalNamePath,
                          @Query("content[portal]") String portalNameContent,
                          @Query("content[email]") String email,
                          @Query("content[subject]") String subject,
                          @Query("content[message]") String message);

И передавать в переменную portalNamePath что-то типа "portals/" + portalNamePath + "/contact_us"

READ ALSO
Почему RequestDispatcher не меняет url в строке браузера?

Почему RequestDispatcher не меняет url в строке браузера?

Есть фильтр который передает управление определенному сервлету таки образом:

196
Как завершить проект в Android Studio?

Как завершить проект в Android Studio?

Как из проекта в Android Studio сделать apk-файл для скачивания на другие устройства?

415
Ошибка со StreamingConnection в Hive

Ошибка со StreamingConnection в Hive

Добрый день! Пытаюсь освоить StreamingConnection в Hive по документации

225
Как сжать видео под размер экрана.

Как сжать видео под размер экрана.

Красным это видеоЧерным это размер экрана телефона

250