如何在Spring LDAP中存储用户的空/Null经理字段?
解决Spring LDAP存储无经理用户的问题
方案1:配置@Attribute注解支持空值
在实体类的manager字段上,给@Attribute注解添加nullable = true配置,这样当字段为null时,Spring LDAP不会向LDAP服务器发送该属性,自然就不会触发无效值的问题:
@Attribute(name = "manager", nullable = true) private String manager;
存储无经理用户时,直接将manager设为null即可,ldapTemplate.create(user)会正常执行,最终的LDAP条目里不会包含manager属性。
方案2:手动控制属性写入逻辑
如果注解配置不生效,可以通过DirContextAdapter手动构建LDAP条目,仅在manager有有效值时才添加该属性:
DirContextAdapter context = new DirContextAdapter(); // 设置用户其他必填属性 context.setAttributeValue("cn", user.getCn()); // 仅当manager不为空时才写入属性 if (user.getManager() != null && !user.getManager().isEmpty()) { context.setAttributeValue("manager", user.getManager()); } ldapTemplate.bind(context);
为什么Null/空字符串不生效?
默认情况下,Spring LDAP的实体映射会尝试将null或空字符串的属性写入LDAP,但LDAP协议不允许属性值为空(部分服务器甚至拒绝空属性的存在),因此会导致创建失败。通过上述两种方式,要么让框架忽略null属性,要么手动跳过无效值的写入,就能实现无经理用户的正常存储。
内容的提问来源于stack exchange,提问作者Peter
相关产品推荐
相关产品推荐

