вернуть модифицированный необработанный ответ как объект json без преобразования в какой-либо конкретный тип объекта? - PullRequest
0 голосов
/ 02 июля 2019

Я использую Kotlin с модернизацией в моем проекте.

Я в основном пытаюсь сделать что-то очень простое.

Имея метод, вызовите интерфейс модернизации, который будет получать информацию из другого API,К сожалению, этот API отвечает на разные типы объектов с одной и той же конечной точки (в зависимости от ввода и результатов), поэтому я смог отобразить ответ и работал нормально.

Теперь я пытаюсь избежать сопоставления с конкретной модельюи вместо этого, просто верните необработанный ответ и выведите его на моем сервисе как вывод Json.

Итак, я сделал это:

В моем сервисе

val response = userService.getUser(request).await()

UserService:

fun getUser(request: User) = client.getInfo(// some parameters )

Затем на моем клиенте (дооснащение) я сделал это:

@GET("/api/v1/user/{}")
    fun getInfo( // some paramters

    ): Deferred<ResponseBody>

Каждый раз, когда я использую ResponseBody, я получаю пустой результат

Каждый раз, когда я использую Deferred<Response<MySpecificObject>>

Я получаю правильный Объект, полный информации.Я хочу избежать этого в данный момент.

Моя модернизация настроена следующим образом:

return Retrofit.Builder()
            .baseUrl(baseUrl)
            .addCallAdapterFactory(CoroutineCallAdapterFactory())       .addConverterFactory(GsonConverterFactory.create())
            .client(okHttpClient)
            .build()
            .create()

В моей конфигурации dropwizard я добавил это:

bootstrap.objectMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES)
        bootstrap.objectMapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS)

Любая идея, еслиэто возможно?

1 Ответ

0 голосов
/ 02 июля 2019

Отказ от ответственности: я не знаю Kotlin и даю ответ только в терминах Java.Я бы посоветовал сделать ваш http-вызов третьему лицу и получить от него необработанный ответ.Тогда вы можете просто прочитать ответ из InputStream даже в виде байтового массива, если хотите, и делать с ним все, что захотите.Вы пожертвуете временем разработки и простотой разработки, но получите чрезвычайную гибкость.
Однако вам не нужно писать собственный обработчик запросов Http.Вот несколько известных сторонних Http-клиентов:

  1. Apache Http-клиент ,
  2. OK Http-клиент
  3. Имой любимый (опять же отказ от ответственности: написано мной) MgntUtils HttpClient: Javadoc , артефакты Maven , Github с библиотекой, исходниками и javadoc.

Клиент MgntUtils Http может возвращать ответ в виде строки (sendHttpRequest()) или даже двоичной информации (sendHttpRequestForBinaryResponse())

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...