الربيع LDAP: البحث DN دون إلقاء استثناء إذا لم يكن موجودًا

StackOverflow https://stackoverflow.com/questions/3840191

  •  27-09-2019
  •  | 
  •  

سؤال

استخدام 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 لن يساعد. لا شيء من الطرق التي ترمي NameNotFoundException قل ذلك في جافادوك.

هل كانت مفيدة؟

المحلول

ال lookup() من المفترض أن يتم استخدام الطريقة فقط عندما تعرف على وجه اليقين أن DN موجود. هذا عادةً لأنك بحثت عن مستخدم أو مجموعة من قبل ، وقام بتخزين مؤقت DN الذي تم إرجاعه من الخادم.

إذا كنت تبحث عن شيء قد يكون أو لا يكون هناك ، فإن واجهة برمجة التطبيقات المناسبة لاستخدامها هي ldapTemplate.search(), ، مع مرشح مناسب. هذا يعيد قائمة بالنتائج ، وفي حالة عدم العثور على نتائج ، فإنه يعيد قائمة فارغة بدلاً من إلقاء استثناء.

نصائح أخرى

في الواقع ، يجبرك الربيع هنا على استخدام استثناءات للتحكم في التدفق (أي أنه ليس خطأك ، إنه قرارهم).

لقد عملت مع ldaptemplate قبل بضعة أشهر ولم أتمكن من العثور على أي شيء أفضل ثم التمسك بهذا الاستثناء وتقييم هذا الموقف على أنه "لم يتم العثور على المستخدم".

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top