我收到了一個請求(與 kotlinx.serialization.Serializable 一起使用):
@Serializable
data class Request(
val a: String,
val b: String,
val c: String = "version"
)
我使用它的改造/API代碼的一部分:
@PUT(value = "path/to/endpoint")
suspend fun sendRequest(@Body request: Request): Response
override fun sendRequest(request: Request) =
flow<Resource<Response, NetworkError>> {
emit(Resource.Success(network.sendRequest(request)))
}.catch {
emit(Resource.Error(it.parseNetworkError()))
}
val c: String = "version"請求中不跟隨默認引數。
但是,如果我在創建它時將其傳遞給Request它。或者,如果我在Request發送之前放置一個斷點檢查它。
所以這有效:
Request("test", "test", "version")
但不是這個:
Request("test", "test")
這是編譯器很聰明并忽略了它還是什么?我怎樣才能防止它這樣做?
uj5u.com熱心網友回復:
這似乎是設計使然。根據kotlinx.serialization 檔案...
Default values are not encoded by default in JSON.
This behavior is motivated by the fact that in most real-life
scenarios such configuration reduces visual clutter, and saves the
amount of data being serialized.
如果你想為一個屬性打開它,你可以用@EncodeDefault
@Serializable
data class Request(
val a: String,
val b: String,
@EncodeDefault val c: String = "version"
)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/520076.html
標籤:安卓科特林改造
上一篇:kotlin中的布爾條件未執行
