【发布时间】:2018-08-08 13:40:14
【问题描述】:
我有这个 kotlin 数据类:
data class Message(
@field:NotEmpty
val from: String?,
@field:NotEmpty
val to: List<String>?,
@field:NotEmpty
val subject: String?,
val cc: List<String>?
)
当我使用 spring mvc api 创建消息时:
@PostMapping("/messages")
@ResponseStatus(HttpStatus.CREATED)
fun create(@Valid message: Message) = service.create(message)
使用以下数据:
{
"subject": "this is a test",
"from": "test@test.com",
"to": ["test@test.com"],
"cc": []
}
我得到了 3 个org.springframework.validation.BindException。
似乎验证发生在 Message 对象的实例化和其属性的设置之间。
谁能解释一下在这种情况下发生了什么以及如何进行验证/实例化?
【问题讨论】:
-
您是否使用
Hibernate validator进行验证并使用Jackson for Kotlin进行JSON 解析? -
是 Kotlin 的 Hibernate 验证器和 Jackson
-
一般来说,Jackson 会解析并实例化
message,然后 Spring(在调用控制器的方法之前)将其传递给 Hibernate 验证器进行验证。您能否提供有关该异常的更多详细信息? -
[...] BindException [...] 字段“来自”的对象“消息”中的字段错误:拒绝值 [null]; [...]字段'to'上的对象'message'中的字段错误:拒绝值[null]; [...] 字段“主题”上的对象“消息”中的字段错误:拒绝值 [null];
-
如果你说的是真的,那为什么我在 kotlin jackson mapping 之后有这个对象?消息(来自=null,to=null,主题=null,cc=null)
标签: spring validation spring-mvc kotlin