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 требует, чтобы эти аннотации были применены к полю. Но Котлин применит эти аннотации к параметру конструктора. Используйте 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 (так что вы не получите ошибку). Это бесполезно в этих случаях использования.

Intereting Posts