retrofit2 - 我收到此错误:尝试注册时使用 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())
}
}
}
}
解决方案
推荐阅读
- pandas - 如何将 boto3 StreamingBody 读入 .parquet 文件?
- vue.js - 如何在 Vue 中制作黑色叠加图像
- node.js - Openshift平台上的Nodejs oracle Db连接
- javascript - Angular 10 升级 - 修复 CommonJS 或 AMD 依赖项可能导致优化救助
- javascript - 内联编辑器中的对话流捕获实体
- php - SQLSTATE [23000]:违反完整性限制:1062 'mail@mail.com' 'users_email_unique' 键的重复条目
- php - Alpha vantage API 不适用于 NSE,而同一查询为外国股票提供输出
- java - RefreshAheadCache 不调用 @cacheable 注释方法
- python - 如何为 Tacker 分解实现 mode-k 乘积 Python?
- smtp - SMTP 错误:DATA END 命令失败:550 5.7.1 客户端无权作为此发件人发送