我的Sping Boot 应用程序中有一个端点,例如
data class SomeRequest(
@field:NotNull
val someField: String?
)
@RestController
class SomeController {
@PostMapping(value = ["/something"])
fun something(@RequestBody @Valid someRequest: SomeRequest) {
someRequest.someField!!
}
}
而且虽然我可以肯定someField
永远不会是null
,但我仍然需要在每次使用!!
时添加它。
不幸的是,我不能将此字段的类型更改为String
,因为这样Kotlin将向构造函数添加自动空值检查,从而导致反序列化失败并阻止执行验证。
我正在寻找的是一种抑制自动空检查的方法。是否有一个注解或类似的东西,我可以在特定的类/字段使用?(不想禁用它的全局)
data class SomeRequest(
@field:NotNull
@NoIntrinsicNullCheck
val someField: String?
)
1条答案
按热度按时间7cwmlq891#
使用最小配置:
玛文:
Spring启动应用程序:
和控制器:
我对数据序列化没有问题:
应用程序日志:
2023 - 01 - 19 13:08:04.601警告70989---[nio-8080-exec-3]. w.s.m.s.默认处理程序异常解析程序:已解决[org. springframework. http. converter. HttpMessage不可读异常:JSON解析错误:JSON属性someField的[简单类型,类com. example. springsandbox. rest. NullRequest]值的示例化失败,原因是创建者参数someField的值缺失(因此为NULL),该参数是不可为空的类型;嵌套异常为com. fasterxml. jackson. module. kotlin。缺少kotlin参数异常:JSON属性someField的[简单类型,类com. example. springsandbox. rest. NullRequest]值示例化失败,原因是创建者参数someField的值缺失(因此为NULL),该参数在[Source:(组织.Spring框架.实用程序.流实用程序$非关闭输入流);行:1,列:2](通过参考链:["某个字段"])]
所以我猜你的配置有问题?也许你没有为kotlin导入一个正确的序列化库(比如从
com.fasterxml.jackson.module
导入jackson-module
而不是jackson-module-kotlin
)或者有些库过时了?顺便说一句,有了这样的配置,验证器
field:NotNull
就不需要了。没有它,也会得到同样的结果。