Отсутствует конвертер при использовании Spring LdapTemplate с Grails Validateable аннотацией
Я использую библиотеку Spring LDAP ( docs) в приложении Grails. У меня есть класс с аннотацией @Entry, поэтому он сопоставлен с сервером LDAP. Это все работает довольно красиво.
Однако, когда я добавляю аннотацию Grails @Validateable (чтобы включить проверку класса LDAP аналогично классам домена Grails) и пытаюсь извлечь данные из LDAP (т. Е. Операция findAll на LdapUserRepo или аналогичную), я получаю следующее исключение: Сообщение: Отсутствует преобразователь из класса java.lang.String в интерфейс org.springframework.validation.Errors, это необходимо для ошибок в полях в классе Entry com.ldap.portal.LdapUser
По сути, кажется, что преобразование AST, выполняемое аннотацией @Validateable, создает дополнительные поля (а именно поле ошибок) для объекта LdapUser. Похоже, что Spring LDAP при обработке логики @Entry предполагает отображение по умолчанию для свойства fields (вероятно, интерпретируя его как строковое поле в объекте LDAP). Когда он ничего не получает от сервера LDAP, он пытается установить для поля типа ValidationErrors значение типа String - пустую строку.
Я немного заглянул в github и нашел этот код, который кажется актуальным и может поддержать мою теорию.
Мой вопрос: ожидается ли такое поведение для аннотаций, и как можно предотвратить неправильную обработку полей, добавленных одной аннотацией, другой аннотацией?
1 ответ
В настоящее время лучший обходной путь, который я нашел для моей конкретной проблемы, - это добавить поле ошибки в мой объект LdapUser и пометить его как временное (чтобы LDAP его игнорировал):
@Transient
ValidationErrors errors