2 votes

Retrofit avec kotlin, impossible de créer @Body

Bonjour, j'obtiens l'erreur suivante :

 java.lang.IllegalArgumentException: Unable to create @Body converter for class com.jr.app.models.ExampleData (parameter #1)

Voici mon ExampleData.kt

data class ExampleData(val id: String,
                   val firstName: String,
                   val secondName: String,
                   val profilImages: String,
                   val info: String) {

}

Mon adaptation d'interface

interface UsersService {

@GET("/usersProfile")
fun getAllUsers(): Call<List<ExampleData>>

@POST("/usersProfile")
fun addUser(@Body exampleData: ExampleData): Call<ResponseBody>

}

qui ajouteUser

  override fun addUser(user: ExampleData) {
    val retrofit = Retrofit.Builder().baseUrl(baseUrl).client(httpAuthClient).build();
    val userService = retrofit.create(UsersService::class.java);
    userService.addUser(user).enqueue(callbackResponse);
}

 private val httpAuthClient: OkHttpClient
    get() {
        val okHttpClient = OkHttpClient().newBuilder().addInterceptor { chain ->
            val originalRequest = chain.request()

            val builder = originalRequest.newBuilder().header(authorizeHeader,
                    Credentials.basic(userName, password))

            val newRequest = builder.build()
            chain.proceed(newRequest)
        }.build()

        return okHttpClient

}

5voto

Valery Ponomarenko Points 178

Ajoutez la dépendance gradle à votre projet :

compile 'com.squareup.retrofit2:converter-gson:VERSION_OF_RETROFIT'

Lorsque vous créez une instance de retrofit, ajoutez cette ligne :

.addConverterFactory(GsonConverterFactory.create())

Dans votre projet de construction, l'objet rétrofit aura l'aspect suivant :

val retrofit = Retrofit.Builder()
    .baseUrl(baseUrl)
    .client(httpAuthClient)
    .addConverterFactory(GsonConverterFactory.create())
    .build()

1voto

R4J Points 62

Je pense que cela n'a rien à voir avec Kotlin mais avec votre configuration Retrofit et votre classe de données ExampleData.

Retrofit n'a aucune idée de comment sérialiser votre instance de ExampleData en JSON. Vous devez ajouter une fabrique de convertisseurs spécifique lorsque vous créez une instance du client Retrofit (voir Builder#addConverterFactory pour plus de détails).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X