首页 > 解决方案 > 我收到此错误:尝试注册时使用 JsonReader.setLenient(true) 在路径中接受格式错误的 JSON

问题描述

我收到此错误:尝试注册时使用 JsonReader.setLenient(true) 在路径中接受格式错误的 JSON。此结构在数据库中正确注册但抛出异常,我无法获得请求的结果

改造.kt

class Retrofit {
    var frutasServices: Services


    init{
        val client = OkHttpClient.Builder()
            .connectTimeout(100, TimeUnit.SECONDS)
            .readTimeout(100, TimeUnit.SECONDS).build()


        val retrofit: Retrofit = Retrofit.Builder()
            .client(client)
            .baseUrl(url)
            .addConverterFactory(MoshiConverterFactory.create().asLenient())
            .build()

        frutasServices = retrofit.create(Services::class.java)
    }
}

请求地籍.kt

data class RequestCadastro(
    @field:Json(name="nome")
    var nome: String = "",
    @field:Json(name="email")
    var email: String="",
    @field:Json(name="cpf")
    var cpf:String="",
    @field:Json(name="telefone")
    var telefone:String="",
    @field:Json(name="celular")
    var celular:String="",
    @field:Json(name="senha")
    var senha:String="",
    @field:Json(name="endereco")
    var endereco:String="",
    @field:Json(name="bairro")
    var bairro:String="",
    @field:Json(name="numero")
    var numero:String="",
    @field:Json(name="complemento")
    var complemento:String="",
    @field:Json(name="cidade")
    var cidade:String=""
)

服务.kt

@Headers( "Content-Type: application/json" )
@POST("user")
suspend fun createUser(@Body params:RequestCadastro): String

地籍存储库.kt

class CadastroRepository {
    private val retrofit = Retrofit()
    private val cadastro = retrofit.frutasServices
    // ...
    suspend fun createUser(
        nome: String, email: String, cpf: String, telefone: String,
        celular: String, senha: String, endereco: String, bairro: String, numero: String,
        complemento: String, cidade: String
    ):String {
        val request = RequestCadastro(nome,email,cpf,telefone,celular,senha,endereco,bairro,
                numero,complemento,cidade)

        return cadastro.createUser(request)


    }
    // This isn't an optimal implementation because it doesn't take into
    // account caching. We'll look at how to improve upon this in the next
        // sections.

地籍视图模型.kt

class CadastroViewModel:ViewModel() {
    private val cadastroRepository= CadastroRepository()

    private var _resultado:String=""
    var resultado: String
        get() = _resultado
        set(value) {
            _resultado = value
        }

    fun create(nome: String,email: String,cpf:String,telefone:String,
               celular:String,senha:String,endereco:String,bairro:String,numero:String,
               complemento:String,cidade:String
    ){
        viewModelScope.launch {
            try {

                _resultado = cadastroRepository.createUser(nome,email,cpf,telefone,
                        celular,senha,endereco,bairro,numero,
                        complemento,cidade)

            }catch (e:Exception){
                Log.d("Service error",e.toString())
            }
        }
    }
}

标签: retrofit2moshi

解决方案


推荐阅读