kotlin和@Valid Spring注解

我有一个实体:

class SomeInfo( @NotNull @Pattern(regexp = Constraints.EMAIL_REGEX) var value: String) { var id: Long? = null } 

和控制器方法:

 @RequestMapping(value = "/some-info", method = RequestMethod.POST) public Id create(@Valid @RequestBody SomeInfo someInfo) { ... } 

@Valid注释不起作用。

看来Spring需要一个默认的无参数构造函数,上面的代码变得像这样丑陋(但工作):

 class SomeInfo() { constructor(value: String) { this.value = value } @NotNull @Pattern(regexp = Constraints.EMAIL_REGEX) lateinit var value: String var id: Long? = null } 

任何好的做法,以减少罗嗦?

谢谢。

似乎Spring需要将这些注释应用于字段。 但是Kotlin会将这些注释应用到构造函数参数中。 使用field:说明符应用注释使其适用于字段。 下面的代码应该适合你。

 class SomeInfo( @field:NotNull @field:Pattern(regexp = Constraints.EMAIL_REGEX) var value: String ) { var id: Long? = null } 

作为米哈尔答案的替代方法,注释吸气剂也是有效的。

 class SomeInfo( @get:NotNull @get:Pattern(regexp = Constraints.EMAIL_REGEX) var value: String ) { var id: Long? = null } 

烦人的部分是,不使用@get:或@field:将注释构造函数参数。 这仍然是有效的kotlin代码(所以你没有得到一个错误)。 在这些用例中,这只是无用的。