Опубликовать необработанный JSON с помощью Retrofit 2

Aug 17 2020

У меня есть большой объект JSON, полученный из другого приложения, и мне нужно сделать пост-вызов API с помощью Retrofit 2. Все примеры или темы, которые я нахожу по этой теме, используют JSONObject или Map. Это означает, что мне нужно проанализировать свою строку (JSON), чтобы создать JSONObject или Map.

Но я хочу каким-то образом прямо вставить свою струну в тело.

Я пробовал так, но не работает:

@Headers("Content-Type: application/json")
@POST("transactions")
Call<Void> submitTransaction(@Body String body);

Таким образом, я отправляю строку, которая экранируется как тело, и мой JSON выглядит странно: снимок экрана

Ответы

1 Nemanja Aug 17 2020 at 22:07

Вам нужно добавить Scalars Converter в список ваших зависимостей Gradle, который позаботится о преобразовании объектов java.lang.String в текстовые / простые тела запроса, поскольку Retrofit по умолчанию использует конвертер Gson. Проверьте последнюю версию по этой ссылке.

https://search.maven.org/search?q=g:com.squareup.retrofit2%20a:converter-scalars

dependencies {
    implementation “com.squareup.retrofit2:converter-scalars:2.4.0”
    ..
}

Затем вам необходимо передать заводскую фабрику преобразователя вашему производителю дооснащения. Позже он сообщит Retrofit, как преобразовать параметр @Body, переданный службе.

val retrofit = Retrofit.Builder()
        .client(okHttpClient)
        .baseUrl("/")
        .addConverterFactory(ScalarsConverterFactory.create())
        .build()

После этого пришло время настроить услугу Retrofit с параметром тела String.

@Headers("Content-Type: application/json")
@POST("transactions")
Call<Void> submitTransaction(@Body String body);