I need to post data with nested Json as screen below (see "user" and then the data )
{
"user" :
{
"email": "xxxxx",
"password" : "surabaya1234"
}
}
currently my retrofit is working with this format
{
"email": "xxxxx",
"password" : "surabaya1234"
}
this is my retrofitClient
object RetrofitClient {
private const val BASE_URL = "http://X.X.X.X"
private val okHttpClient = OkHttpClient.Builder()
.addInterceptor { chain ->
val original = chain.request()
val requestBuilder = original.newBuilder()
.addHeader("Authorization", token)
.method(original.method(), original.body())
val request = requestBuilder.build()
chain.proceed(request)
}.build()
val instance: Api by lazy {
val retrofit = Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.client(okHttpClient)
.build()
retrofit.create(Api::class.java)
}
}
this is my buttonListener, it send the data when it pressed
binding.buttonSignUp.setOnClickListener {
val email = editTextEmail.text.toString().trim()
val phoneNumber = editTextPhone.text.toString().trim()
val password = editTextPassword.text.toString().trim()
val passwordConfirmation = editTextPassword.text.toString().trim()
if (email.isEmpty()) {
editTextEmail.error = "Email Required"
editTextEmail.requestFocus()
return@setOnClickListener
}
RetrofitClient.instance.createUser(email, password, phoneNumber).enqueue(object: Callback<User>{
override fun onFailure(call: Call<User>, t: Throwable) {
toast = Toast.makeText(activity,"Not OK",Toast.LENGTH_LONG)
}
override fun onResponse(call: Call<User>, response: Response<User>) {
toast = Toast.makeText(activity,"Sukses",Toast.LENGTH_LONG)
}
})
this is Interface
interface Api {
@FormUrlEncoded
@POST("users")
fun createUser(
@Field("email") email:String,
@Field("password") password:String
):Call<User>
}
how do I change my code probably Interface so it can send the data in nested json format like sample above, this probably simple answer, but I'm new in kotlin / java