在UnboundID LDAP SDK Persistence Framework中指定LDAPField的默认值

时间:2015-08-12 12:00:47

标签: java unboundid-ldap-sdk

是否有(简单)方法为LDAPField注释变量指定默认值?例如,如果没有找到值,我不希望列表myNumericAttr为null,而是希望它保留一个空列表。

import com.unboundid.ldap.sdk.persist.LDAPField;
import com.unboundid.ldap.sdk.persist.LDAPObject;

@LDAPObject(structuralClass="myStructuralClass")
public class MyObject
{
    @LDAPField(attribute="myStringAttr")
    private String myStringAttr;

    @LDAPField(attribute="myNumericAttr")
    private List<Long> myNumericAttr;
}

作为一种解决方法,我可以自己实现postDecodeMethod,但这会产生大量代码。

@SuppressWarnings("unused")
private void doPostDecode() throws LDAPPersistException, IllegalArgumentException, IllegalAccessException
{
    for (Field field : this.getClass().getDeclaredFields())
    {
        if(field.isAnnotationPresent(LDAPField.class))
        {
            // check if field value is null
            if (field.get(this) == null)
            {
                String fieldType = field.getType().getName();
                log.info("field type: {}", fieldType);
                if (fieldType.equals("java.lang.String"))
                {
                    field.set(this, "");
                }
                else if (fieldType.equals("java.util.List"))
                {
                    // Find out the type of list we are dealing with
                    ParameterizedType listGenericType = (ParameterizedType) field.getGenericType();
                    Class<?> listActualType = (Class<?>) listGenericType.getActualTypeArguments()[0];
                    log.debug("actual type of list: {}", listActualType.getName());
                    field.set(this, getModel(listActualType));
                }
            }
        }
    }
}

private <T> ArrayList<T> getModel(Class<T> type) {
    ArrayList<T> arrayList = new ArrayList<T>();
    return arrayList;
}

所以我的问题是,我是否错过了某些功能,或者是否正在实施您自己postDecodeMethod目前唯一的可能性?

1 个答案:

答案 0 :(得分:1)

查看@LDAPField批注类型的defaultDecodeValue元素。例如:

@LDAPField(attribute="myStringAttr",
           defaultDecodeValue="thisIsTheDefaultValue")
private String myStringAttr;

如果正在解码的条目中不存在myStringAttr属性,那么持久性框架将表现为它的确存在,其值为“thisIsTheDefaultValue”。