在我的Ktor REST API中,我收到JSON。 kotlinx.serialization
为我方便地将其反序列化为简单数据类。在继续使用此数据之前,我必须进行一些验证。然后,我可以将其传递给代码的其他部分。
我想在反序列化但未经验证的数据,验证本身和经过验证的代码之间清楚地分开。
例如,我具有以下作用:
@Serializable
data class Input(val something: Int)
fun Input.validate() {
if(something < 5) { throw WhateverException("invalid") }
}
但这有一些问题:当在任何地方接收到Input
的实例时,我不能确定它已经被验证,因此为了安全起见,我会再次调用validate()
。
因此,为了避免这种情况,我想让validate()
返回某个版本的Input
,该版本告诉我数据是有效的,以便在我的代码库中可以使用方法签名来接受经过验证的数据
我知道我可以将类Input
复制到称为ValidatedInput
的私有类中,并让validate()
返回该类,但这看起来像代码重复。 (我最终将拥有诸如Input
之类的数十个类。)这也将阻止接口指定Input
具有validate
方法,并使其返回类似{{1 }}
我如何设计我的类和方法来清楚地表达这种分离,而无需重复代码?