我想将我的可为空的字符串和布尔值从REST映射到不可为空
我的适配器:
object NullToEmptyStringAdapter: JsonAdapter<String>() {
@FromJson
@NullToEmptyString
override fun fromJson(reader: JsonReader): String {
if (reader.peek() != JsonReader.Token.NULL) {
return reader.nextString()
}
reader.nextNull<Unit>()
return ""
}
@ToJson
override fun toJson(writer: JsonWriter, @NullToEmptyString value: String?) {
writer?.value(value)
}
}
@Retention(AnnotationRetention.RUNTIME)
@JsonQualifier
annotation class NullToEmptyString
object NullToFalseAdapter: JsonAdapter<Boolean>() {
@FromJson
@NullToFalse
override fun fromJson(reader: JsonReader): Boolean {
if (reader.peek() != JsonReader.Token.NULL) {
return reader.nextBoolean()
}
reader.nextNull<Unit>()
return false
}
@ToJson
override fun toJson(writer: JsonWriter, @NullToFalse value: Boolean?) {
writer?.value(value)
}
}
@Retention(AnnotationRetention.RUNTIME)
@JsonQualifier
annotation class NullToFalse
我像
那样附加它们return Moshi.Builder()
.add(NullToFalseAdapter)
.add(NullToEmptyStringAdapter)
NullToEmptyStringAdapter
的工作与预期的一样,但是对于NullToFalseAdapter
,我得到Caused by: java.lang.IllegalArgumentException: No JsonAdapter for boolean annotated [@xx.xx.xx.network.adapters.NullToFalse()]
有什么主意吗?
答案 0 :(得分:0)
看看这个页面。
https://github.com/square/moshi/issues/560
<块引用>您需要将限定符注解移动到@ToJson 函数的参数中。 README 中有一个示例,它在限定符部分使用了 @HexColor。