Отсутствующие атрибуты в аннотациях сопоставления каталогов объектов Spring LDAP - PullRequest
0 голосов
/ 20 сентября 2018

Я пытаюсь использовать сопоставление объектных каталогов Spring LDAP для записи объекта на сервер LDAP.Объект помечен @ Entity , а несколько полей помечены @Attribute.

Пока все аннотированные поля заполнены, все работает.Но если значение поля, скажем myattribute , равно нулю или пустой строке, create и update методы LdapTemplate throwошибки.Сервер отклоняет операцию, с жалобой «Значение атрибута» для атрибута «myattribute» синтаксически неверно »

Схема LDAP допускает отсутствие« myattribute »(это атрибут« may »для соответствующегообъектный класс), но если он присутствует, он не может быть пустым (он имеет синтаксис строки каталога).Я не могу изменить схему.

Есть ли способ заставить Spring LDAP пропустить myattribute, когда соответствующее поле POJO пустое или пустое, вместо попытки создать атрибут с пустым значением?

1 Ответ

0 голосов
/ 20 сентября 2018

Я нашел решение, которое может быть не самым элегантным для моего приложения, но оно работает.Вместо того, чтобы объявлять поле Java типом String , объявите его типом List .Затем в установщике, если значение пустое или равно нулю, я устанавливаю длину списка равной нулю вместо установки одного пустого значения.

@Entry( objectClasses={"myObject"} )
public class MyDataContainer {

    @Attribute("myattribute")
    private List<String> _myattribute = new ArrayList<String>(1);

    public String getMyAttribute() {
        if ( _myattribute.length() > 0 ) {
            return _myattribute.get(0);
        }
        return null;
    }

    public void setMyAttribute( String value ) {
        _myattribute.clear();
        value = ( value == null ) ? "" : value.trim();
        if ( ! "".equals( value ) ) {
            _myattribute.add( value );
        }
    }
}
...