首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当服务器为moshi中的kotlin数据类发送空值时,该数据类中的默认值无效。

问当服务器为moshi中的kotlin数据类发送空值时,该数据类中的默认值无效。
EN

Stack Overflow用户
提问于 2018-11-28 09:04:26
回答 1查看 4.7K关注 0票数 8

我使用Moshi从服务器解析json。如果服务器发送空项默认值未设置!但是服务器没有发送该项的默认值集。

杰森:

代码语言:javascript
复制
{"percentChange": null,"change": "-2500.00","value": "130000","name": null}

数据类:

代码语言:javascript
复制
@JsonClass(generateAdapter = true) data class Reference(val name:String? = "-",val value: Double,val change: Double,val percentChange: Double? = -10.0,)

但是名称和percentChange的数据为null,对于percentChange应该是"-“表示名称,"-10.0”。如果服务器不发送名称和percentChange,默认值工作,但如果发送空默认值不工作!

我使用转换器-moshi:2.4.0和改造:2.4.0

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-04 00:30:31

这是按照预期工作的,因为作为JSON中键的值的null文字在语义上不同于缺少键和值。

您可以为用例定制一个JsonAdapter。

代码语言:javascript
复制
@JsonClass(generateAdapter = true)
data class Reference(
  @Name val name: String = "-",
  val value: Double,
  val change: Double,
  val percentChange: Double? = -10.0
) {
  @Retention(RUNTIME)
  @JsonQualifier
  annotation class Name

  companion object {
    @Name @FromJson fun fromJson(reader: JsonReader, delegate: JsonAdapter<String>): String {
      if (reader.peek() == JsonReader.Token.NULL) {
        reader.nextNull<Unit>()
        return "-"
      }
      return delegate.fromJson(reader)!!
    }

    @ToJson fun toJson(@Name name: String): String {
      return name
    }
  }
}

@Test fun reference() {
  val moshi = Moshi.Builder()
      .add(Reference)
      .build()
  val adapter = moshi.adapter(Reference::class.java)
  val decoded = Reference("-", 130_000.toDouble(), (-2_500).toDouble(), null)
  assertThat(adapter.fromJson(
      """{"percentChange": null,"change": "-2500.00","value": "130000"}"""))
      .isEqualTo(decoded)
  assertThat(adapter.fromJson(
      """{"percentChange": null,"change": "-2500.00","value": "130000","name": null}"""))
      .isEqualTo(decoded)
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53515678

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档