Retrofit + Moshi + Kotlin = 403 Ошибка при попытке получить объект Json - PullRequest
0 голосов
/ 02 июля 2019

Я пытаюсь получить JsonObject с Retrofit, используя Moshi для разбора, но продолжаю сталкиваться с ошибкой 403. Я могу получить доступ к запросу из своего браузера, так что я почти уверен, что я что-то не так делаю в моей настройке здесь ...

object RetrofitFactory {
    private val moshi = Moshi.Builder()
        .add(KotlinJsonAdapterFactory())
        .build()

    fun makeRetrofitService(): Retrofit =
        Retrofit.Builder()
            .addConverterFactory(MoshiConverterFactory.create(moshi))
            .addCallAdapterFactory(CoroutineCallAdapterFactory())
            .baseUrl("http://url.to.destination/")
            .build()

}

interface MyApiService {
    @GET("products.json")
    fun getPropertiesAsync(): Deferred<List<ProductProperty>>
}

object MyApi {
    val retrofitService: MyApiService by lazy {
        RetrofitFactory.makeRetrofitService().create(MyApiService::class.java)
    }
}

Сам JsonObject (products.json) начинается с внешнего объекта «внешний», например:

{
  outer : [
    {inner object1},
    {inner object2},
    {inner object3}
  ]
}

, но попытка получить «products.json / outer» выдает ошибку 403, а попытка получить «products.json» говорит: com.squareup.moshi.JsonDataException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at path $

Есть идеи, что я делаю не так?

1 Ответ

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

Должен быть класс с полем outer.Потому что outer это объект.

class ProductsBody (
    @Json("outer")
    var outer: List<ProductProperty>? = null
)

interface MyApiService {
    @GET("products.json")
    fun getPropertiesAsync(): Deferred<ProductsBody> // @NOTE the change here
}


...