Spring Ldap:如果不存在则查找dn而不抛出异常

时间:2010-10-01 14:38:52

标签: java spring ldap spring-ldap

在Spring LDAP中使用LdapTemplate,我有以下代码:

Object object=null;
try{
    String dn = "cn=readers,ou=groups,dc=mycompany, dc=com";
    object = this.ldapTemplate.lookup(dn);
} catch(final NameNotFoundException e){
    // create Object
}

但是自从我读过我的Joshua Bloch以来,我知道不应该将异常用于控制流程。有没有办法查找一个dn,看看它是否存在而不抛出异常,如果不存在?一定有,但我找不到。我正在寻找像这样(或类似)的代码:

String dn = "cn=readers,ou=groups,dc=mycompany, dc=com";
Object object=this.ldapTemplate.someMethod(dn);
if(object==null){
    // create Object
}

有人可以帮忙吗?

BTW:只是看看JavaDoc无济于事。抛出NameNotFoundException的方法都没有在JavaDocs中说明。

2 个答案:

答案 0 :(得分:7)

只有当您确定DN存在时才应使用lookup()方法。这通常是因为您之前搜索过并找到了一个用户或组,并缓存了从服务器返回的DN。

如果您正在寻找可能存在或可能不存在的内容,请使用正确的API ldapTemplate.search(),并使用适当的过滤器。这将返回结果列表,如果没有找到结果,则返回空列表而不是抛出异常。

答案 1 :(得分:2)

实际上,Spring迫使你在这里使用流量控制的例外(即,这不是你的错,这是他们的决定)。

几个月前我和LdapTemplate一起工作过,我找不到更好的东西然后抓住那个例外并将这种情况评估为“找不到用户”。