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代码(所以你没有得到一个错误)。 在这些用例中,这只是无用的。