Spring LDAP对象目录映射器注释缺少属性

时间:2018-09-20 03:33:02

标签: java spring ldap spring-ldap

我正在尝试使用Spring LDAP的对象目录映射将对象写入LDAP服务器。该对象用 @Entity 注释,几个字段用 @Attribute 注释。

只要填充了所有带注释的字段,一切都将起作用。但是,如果某个字段的值(例如 myattribute )为null或为空字符串,则 LdapTemplate <的 create update 方法/ strong>引发错误。服务器拒绝该操作,并且对属性“ myattribute”的投诉“属性值”在语法上不正确”

LDAP模式允许丢失“ myattribute”(对于相关对象类是“ may”属性),但是如果存在,则不允许其为空(具有目录字符串语法)。我无法更改架构。

是否有某种方法可以使Spring LDAP在相应的POJO字段为null或为空时省略“ myattribute”,而不是尝试创建具有空白值的属性?

1 个答案:

答案 0 :(得分:0)

我找到了一个解决方案,对于我的应用程序来说,这可能不是最优雅的解决方案,但是它可以工作。与其将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 );
        }
    }
}