如果响应中的字段类型错误,Square Moshi 将 Int 转换为 String
Square Moshi casts Int to String if field type is wrong in response
我正在尝试用结构
解析JSON错误正文
{
"code": 1,
"message": "Some error message"
}
在为 message
作为 Int
发送的场景编写测试时,我预计反序列化会失败。但是,Moshi 将 Int
类型转换为 String
。这种行为是预期的吗?
这是相同的失败测试:
@Test
fun `network error with wrong types should not be parsed`() {
val errorResponseWithNoCode = """
{
"message": 123
}
""".trimIndent()
val result = NetworkErrorParser.parse(errorResponseWithWrongMessageType)
assertThat(result)
.isEqualTo(null)
}
NetworkErrorParser
非常简单:
object NetworkErrorParser {
private val networkErrorAdapter by lazy {
Moshi.Builder().build().adapter(NetworkError::class.java)
}
/**
* Parses given string to [NetworkError].
*
* If JSON can't be parsed or is malformed, returns `null`.
* The caller is supposed to handle the error accordingly in such an event.
*/
fun parse(json: String): NetworkError? {
return try {
networkErrorAdapter.fromJson(json)
} catch (e: JsonDataException) {
null
} catch (e: JsonEncodingException) {
null
}
}
}
此行为是预期的。因为 JSON 数字有精度限制,Moshi 允许您将数值分配给字符串属性,将字符串值分配给数字属性。
例如,您可能决定引用“9007199254740993”这样的值来防止浮点精度丢失。
我正在尝试用结构
解析JSON错误正文{
"code": 1,
"message": "Some error message"
}
在为 message
作为 Int
发送的场景编写测试时,我预计反序列化会失败。但是,Moshi 将 Int
类型转换为 String
。这种行为是预期的吗?
这是相同的失败测试:
@Test
fun `network error with wrong types should not be parsed`() {
val errorResponseWithNoCode = """
{
"message": 123
}
""".trimIndent()
val result = NetworkErrorParser.parse(errorResponseWithWrongMessageType)
assertThat(result)
.isEqualTo(null)
}
NetworkErrorParser
非常简单:
object NetworkErrorParser {
private val networkErrorAdapter by lazy {
Moshi.Builder().build().adapter(NetworkError::class.java)
}
/**
* Parses given string to [NetworkError].
*
* If JSON can't be parsed or is malformed, returns `null`.
* The caller is supposed to handle the error accordingly in such an event.
*/
fun parse(json: String): NetworkError? {
return try {
networkErrorAdapter.fromJson(json)
} catch (e: JsonDataException) {
null
} catch (e: JsonEncodingException) {
null
}
}
}
此行为是预期的。因为 JSON 数字有精度限制,Moshi 允许您将数值分配给字符串属性,将字符串值分配给数字属性。
例如,您可能决定引用“9007199254740993”这样的值来防止浮点精度丢失。