Опубликовать необработанный JSON с помощью Retrofit 2
У меня есть большой объект JSON, полученный из другого приложения, и мне нужно сделать пост-вызов API с помощью Retrofit 2. Все примеры или темы, которые я нахожу по этой теме, используют JSONObject или Map. Это означает, что мне нужно проанализировать свою строку (JSON), чтобы создать JSONObject или Map.
Но я хочу каким-то образом прямо вставить свою струну в тело.
Я пробовал так, но не работает:
@Headers("Content-Type: application/json")
@POST("transactions")
Call<Void> submitTransaction(@Body String body);
Таким образом, я отправляю строку, которая экранируется как тело, и мой JSON выглядит странно: снимок экрана
Ответы
Вам нужно добавить 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);