是否有(简单)方法为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
目前唯一的可能性?
答案 0 :(得分:1)
查看@LDAPField批注类型的defaultDecodeValue元素。例如:
@LDAPField(attribute="myStringAttr",
defaultDecodeValue="thisIsTheDefaultValue")
private String myStringAttr;
如果正在解码的条目中不存在myStringAttr属性,那么持久性框架将表现为它的确存在,其值为“thisIsTheDefaultValue”。