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
Почему класс Kotlin не нужно открывать в Spring Boot больше Получить загрузчик классов generics для разбора вложенного поля Parcelable generic Свойства делегата Kotlin, реализующие функцию оператора «предоставлятьDelegate», но метод никогда не вызывал Как использовать TypeToken + generics с Gson в Kotlin Как делиться PDF-файлами через почтовые приложения и Google Диском без Drive API? Элементы представления Android NavigationView Headerlayout не запускают события щелчка как уменьшить размер видео во время записи, Android? Как использовать инъекцию зависимостей с помощью Kotlin для таргетинга JavaScript? Kotlin Exposed не совершает транзакции Издевательская функция сопутствующего объекта в котлине kotlin retrofit-Background sticky concurrent mark sweep GC освобожден 65326 (1448KB) Объекты AllocSpace, 62 (1736KB) Объекты LOS, Выбранный в настоящее время отладчик Java не поддерживает точки останова типа «Точки останова линии Котлин», Котлинский эквивалент тернарного оператора Handy подтвердить диалог javafx в kotlin Исправьте общий тип для типа первого параметра