Отсутствующие атрибуты с аннотациями сопоставления каталогов объектов Spring LDAP

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

Пока все аннотированные поля заполнены, все работает. Но если значение поля, скажем, myattribute, равно null или пустой строке, методы create и update в LdapTemplate< /strong> выдавать ошибки. Сервер отклоняет операцию с жалобой "Значение атрибута" для атрибута "myattribute" синтаксически неверно"

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

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


person Dan Menes    schedule 20.09.2018    source источник


Ответы (1)


Я нашел решение, которое может быть не самым элегантным для моего приложения, но оно работает. Вместо того, чтобы объявлять поле 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 );
        }
    }
}
person Dan Menes    schedule 20.09.2018