【发布时间】:2019-04-09 08:21:14
【问题描述】:
我遇到了一个我不知道如何处理的意外错误。
我有一个这样的数据类:
data class Payload (
@SerializedName("id")
var id: String
@SerializedName("type")
var type: String,
@SerializedName("data")
var data: String
)
还有一个像这样的简单 Spring 控制器:
@PostMapping("/some-endpoint")
fun dataHandler(@RequestBody payload: Payload): String{
when (payload.type){
"someType" -> {
val result = try {
gson.fromJson(payload.data, payloadData::class.java)
} catch (e: Exception){
throw BadDataException("Bad Data")
}
payloadProcessor.process(result, payload.id) // NPE here
}
"otherType" -> {
doSomethingElseHere()
}
}
}
当执行到达 payloadProcessor.process 时,会发生空指针异常,因为 id 显然为空。另一方面,对象已创建,其余两个值似乎已正确填充。
如果我添加一个检查空值的 if 语句,ide 会抱怨负载属性永远不会为空,将 if 语句标记为冗余,但实际上并非如此。
我的印象是 null 安全属性是……嗯…… null 安全的。至少我希望在构造对象后会发生空指针异常。
我的问题是:
- Spring 如何创建这样的对象
- 为什么在对象构造时没有检测到这一点
- “Kotlin”的处理方式是什么,因为我不想在一个假定为 null 的安全对象中检查 null 参数。
【问题讨论】:
标签: spring spring-boot kotlin nullpointerexception kotlin-null-safety