Отсутствует конвертер при использовании 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
Другие вопросы по тегам