У меня есть класс данных оболочки Kotlin, цель которого - обернуть произвольные значения дополнительной информацией об их состоянии. Для целей этого вопроса, что-то вроде этого будет достаточно:
data class Wrapper<T>(val content: T)
К сожалению, иногда (в частности, в путях нарушения ограничений проверки javax) Spring пытается получить прямой доступ к вложенным свойствам:
data class Name(val first: Wrapper<String>)
data class Person(val name: Wrapper<Name>)
val foo = Person(Wrapper(Name(Wrapper("Steve"))))
Очевидно, что для значения типа foo
путь свойства name.first
не определен, так как вместо него должно быть name.content.first.content
. Поэтому, если Spring получает, скажем, ConstraintViolation с путем name.first
(мы написали валидатор для создания путей для Wrapper
таким образом), он пытается получить доступ к этому пути на foo
. foo
имеет name
, но это Wrapper
, который имеет только content
, а не first
, поэтому Spring вызывает исключение.
Есть ли способ сообщить Spring, что все значения типа Wrapper
имеют те же поля, что и их content
? Это похоже на AOP и Прокси, но я не могу понять, как сделать Wrapper
Прокси, и если это вообще возможно.