{
"id": 33,
"is_local": "true",
"comments":
[
{ "url": "aaa" },
{ "url": "bbb" },
{ "url": "ccc" )
]
}
我正在使用这个自定义适配器来返回默认值,以防出现解析错误,就像我的例子中的is is_local字段一样
class DefaultOnDataMismatchAdapter<T> private constructor(private val delegate:
JsonAdapter<T>, private val defaultValue: T?) : JsonAdapter<T>() {
@Throws(IOException::class)
override fun fromJson(reader: JsonReader): T? =
try {
delegate.fromJsonValue(reader.readJsonValue())
} catch (e: Exception) {
println("Wrongful content - could not parse delegate " +
delegate.toString())
defaultValue
}
@Throws(IOException::class)
override fun toJson(writer: JsonWriter, value: T?) {
delegate.toJson(writer, value)
}
companion object {
@JvmStatic
fun <T> newFactory(type: Class<T>, defaultValue: T?):
JsonAdapter.Factory {
return object : JsonAdapter.Factory {
override fun create(requestedType: Type, annotations:
Set<Annotation>, moshi: Moshi): JsonAdapter<*>? {
if (type != requestedType) {
return null
}
val delegate = moshi.nextAdapter<T>(this, type,
annotations)
return DefaultOnDataMismatchAdapter(delegate,
defaultValue)
}
}
}
}
}
我的测试失败,布尔值不是false,我已经将上面的适配器添加到moshi中
@Before
fun createService() {
val moshi = Moshi.Builder()
.add(DefaultOnDataMismatchAdapter
.newFactory(Boolean::class.java,false))
.add(KotlinJsonAdapterFactory())
.build()
val retrofit = Retrofit.Builder()
.baseUrl(mockWebServer.url("/"))
.addConverterFactory(MoshiConverterFactory.create(moshi))
.build()
service = retrofit.create(ApiStores::class.java)
}
@Test
fun getBooleanParsingError() {
enqueueResponse(case1)
val article = service.getArticle().execute()
assert(article.body()!!).isNotNull()
assert(article.body()!!.is_local).isEqualTo(false) // test fail here
}
但是,当我将模型类中is_local字段的datatype更改为not nullable时,它就可以工作了
问题在于类型kotlin.boolean
和kotlin.boolean?
对应于两种不同的Java类型:
kotlin.boolean
是boolean
Java基元类型kotlin.boolean?
是Java.lang.boolean
Java类型在测试中,您为kotlin.boolean
(即Javaboolean
类型)创建了一个适配器,而在数据模型中,您有一个kotlin.boolean?
(即Java.lang.boolean
类型)。因此,当调用工厂
的方法create(...)
时,您所处的情况是type!=requestedtype
,因此没有创建适配器,而是使用KotlinJsonAdapter
。此时,由于Json的is_local
字段不是布尔值(而是字符串),Moshi应该引发异常。
我正试图通过MoneySend API在万事达卡的沙箱上提出付款请求。下面是C#的示例代码,也可以在这里找到 问题陈述: 完全异常: mastercard.core.exceptions.apiExceptions:无法解析远程名称:“sandbox.api.mastercard.com”-->system.net.webException:无法解析远程名称:“sandbox.api.master
这样的问题已经问过好几次了,我明白为什么会发生,大概除了重试,我们对此无能为力。 我有一个关于名称解析的问题。 我使用的是3.5.NET的AWS.NET SDK。我正在上传一个大文件(>500MB到1.5GB,医学图像)。我调用方法。 错误发生在大约250MB上载完成后。 这是实际的例外
我正在使用JBoss开关站连接到安全的远程SOAP web服务。在发送请求后出于某种原因;远程web服务正在停止任何进一步的通信;所以我没有收到回复。 我需要一个想法或解决方案,这可能是个问题。 原因:java。网SocketException:SocketException调用https://***********。asmx:来自服务器的文件意外结束 远程Web服务正在使用自签名证书;我已将服务
本文向大家介绍浅谈Java线程Thread之interrupt中断解析,包括了浅谈Java线程Thread之interrupt中断解析的使用技巧和注意事项,需要的朋友参考一下 这一篇我们说说Java线程Thread的interrupt中断机制。 中断线程 线程的thread.interrupt()方法是中断线程,将会设置该线程的中断状态位,即设置为true,中断的结果线程是死亡、还是等待新的任务或
嗨,我对Jprofiler很陌生
本文向大家介绍使用python远程操作linux过程解析,包括了使用python远程操作linux过程解析的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了使用python远程操作linux过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 在云服务测试中,往往需要我们进入云服务内容进行相关内容的测试。这测试可以使用平台自身的noV