1

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
}

誰でも助けることができますか?

ところで: JavaDoc を見るだけでは役に立ちません。JavaDocsでスローするメソッドはありませんNameNotFoundException

4

2 に答える 2

8

このlookup()メソッドは、DN が存在することが確実にわかっている場合にのみ使用することを想定しています。これは通常、以前にユーザーまたはグループを検索して見つけ、サーバーから返された DN をキャッシュしたことが原因です。

そこにあるかもしれないし、ないかもしれない何かを探しているなら、使用する正しい API はldapTemplate.search()、適切なフィルターを備えた です。これは結果のリストを返します。結果が見つからない場合は、例外をスローするのではなく、空のリストを返します。

于 2011-06-22T11:16:15.983 に答える
2

実際、Spring はここでフロー制御に例外を使用するように強制します (つまり、それはあなたのせいではなく、彼らの決定です)。

数か月前に LdapTemplate を使用しましたが、その例外をキャッチしてその状況を「ユーザーが見つかりません」と評価するよりも良いものを見つけることができませんでした。

于 2010-10-01T14:42:41.643 に答える