Как создать JSON CustomTypeAdapter в Apollo GraphQL для Android с помощью Kotlin

Я изо всех сил пытаюсь выяснить, как добавить CustomTypeAdapter к моему ApolloClient.

Для мутации наш сервер ожидает ввода json. Соответствующее приложение для iOS передается в виде строки json.

Когда я передаю строку, я получаю сообщение, спрашивающее, забыл ли я добавить пользовательский тип.

Вот моя попытка:

build.gradle

apollo {
        useSemanticNaming = true
        customTypeMapping['ISOTime'] = "java.util.Date"
        customTypeMapping['JSON'] = "java.lang.JSONObject"
    }

Вот где он создан.

val jsonCustomTypeAdapter = object : CustomTypeAdapter<JSONObject> {
                override fun decode(value: CustomTypeValue<*>): JSONObject {
                    return JSONObject()
                }

                override fun encode(value: JSONObject): CustomTypeValue<*> {
                    return CustomTypeValue.GraphQLJsonString(value.toString())
                }
            }

 mApolloClient = ApolloClient
                .builder()
                .serverUrl(baseUrl)
                .addCustomTypeAdapter(jsonCustomTypeAdapter)
                .normalizedCache(cacheFactory, CacheKeyResolver.DEFAULT)
                .httpCache(ApolloHttpCache(cacheStore, null))
                .okHttpClient(mHttpClient)
                .build()

Похоже, что Apollo сгенерировал перечисление CustomType, реализующее ScalarType, но я не уверен, использовать его или нет.

@Generated("Apollo GraphQL")
public enum CustomType implements ScalarType {
  JSON {
    @Override
    public String typeName() {
      return "Json";
    }

    @Override
    public Class javaType() {
      return Object.class;
    }
  },

  ID {
    @Override
    public String typeName() {
      return "ID";
    }

    @Override
    public Class javaType() {
      return String.class;
    }
  }
}

Я попытался привести пример, приведенный на github apolloandroid, но он не сработал для меня, и это на Java, и после того, как я конвертирую его в Kotlin, он не компилируется.

Любые намеки или указания, чтобы следовать, будут оценены. Благодарю.

1 ответ

Оказывается, Аполлон автоматически сгенерировал тип, и все, что мне нужно было сделать, это правильно объявить его в build.gradle. Мне не нужно было добавлять какой-либо адаптер нестандартного типа в ApolloClient.

ПРИМЕЧАНИЕ. Тип Json был предоставлен нашим сервером.

apollo {
        useSemanticNaming = true
        customTypeMapping['ISOTime'] = "java.util.Date"
        customTypeMapping['Json'] = "java.lang.String"
    }
Другие вопросы по тегам