gson 当Sping Boot 服务器完成请求时,来自reflect的响应为null

vs3odd8k  于 2023-06-22  发布在  其他
关注(0)|答案(1)|浏览(140)

我有以下代码作为我的改装代码:
SwapItApi.kt

interface SwapItApi {
    @Headers("Content-Type: application/json")
    @POST("customer/add")
    fun addCustomer(@Body customerData: Customer): Call<Customer>
}

object ServiceBuilder {
    private val client = OkHttpClient.Builder().build()

    private val retrofit = Retrofit.Builder()
        .baseUrl("http://192.168.4.29:8102/api/")
        .addConverterFactory(GsonConverterFactory.create())
        .client(client)
        .build()

    fun<T> buildService(service: Class<T>): T = retrofit.create(service)
}

SwapItApiService.kt

class SwapItApiService {
    fun addUser(customerData: Customer, onResult: (Customer?) -> Unit) {
        val retrofit = ServiceBuilder.buildService(SwapItApi::class.java)

        retrofit.addCustomer(customerData).enqueue(
            object: Callback<Customer> {
                override fun onFailure(call: Call<Customer>, t: Throwable) {
                    onResult(null)
                }

                override fun onResponse(call: Call<Customer>, response: Response<Customer>) {
                    val customer = response.body()

                    onResult(response.body())
                }
            }
        )
    }
}

RegistrationContent.kt

...
private fun addCustomer(customerData: Customer, scope: CoroutineScope, snackbarHostState: SnackbarHostState) {
    val apiService = SwapItApiService()

    var convertedDOB = ""

    convertedDOB += customerData.dob!!.substring(4, 8)
    convertedDOB += "-"
    convertedDOB += customerData.dob!!.substring(2, 4)
    convertedDOB += "-"
    convertedDOB += customerData.dob!!.substring(0, 2)


    val customer = Customer(
        id = null,
        username = customerData.username,
        password = customerData.password,
        dob = convertedDOB,
        firstName = customerData.firstName,
        lastName = customerData.lastName,
        isActive = null,
    )

    apiService.addUser(customer) {
        if(it?.id != null) {
            scope.launch {
                snackbarHostState.showSnackbar("ID: ${it.id}, Username: ${it.username}")
            }
        }
        else {
            scope.launch {
                snackbarHostState.showSnackbar("Error registering new customer.")
            }
        }
    }
}
...

所以当我调用RegistrationContent.addCustomer(...)时,它调用了SwapItApiService.addCustomer(...),它成功返回,当查看我的数据库表时,我发送的条目已经创建,但是,RegistrationContent.addCustomer(...)的snackbar显示“注册新客户时出错”。
在断点之后,我发现it?.id为null。所以我的代码似乎没有等待。
我是新来的,所以我不确定该怎么做才能让它正常工作。

plicqrtu

plicqrtu1#

所以经过相当多的修修补补(我的意思是很多),事实证明我是
旁注:Gson主要针对Java程序。在大多数情况下,它可能适用于Kotlin,但在某些情况下,它并不很好地工作,例如。零安全性,请参见这个问题。也许可以考虑使用具有显式Kotlin支持的JSON库。- Marcono1234
他说,我必须改变Jackson。然后我意识到,在我的Customer类中,我没有在相关条目上使用@JsonProperty。哦,我还需要添加一个@JsonIgnoreProperties(ignoreUnknown = true)与我的响应从服务器和一些但在Customer添加后,它现在工作正常。

相关问题