Tds/OpenLdapなどで異なる操作を実行するためのrelativ複合SpringBoot-Applicationを作成しました。 これで例外処理に関するアプリケーションを改善したいと思います。しかしここで私は少し問題や理解の問題があります。 は例えば、私はグループからユーザーを削除することができ、私の外側のクラスを持っている:SpringBoot - 他のクラスから例外を渡す方法
@ResponseStatus(HttpStatus.OK)
@RequestMapping(value = "/usergroups", method = RequestMethod.DELETE, consumes = "application/json", produces = "application/json")
public void removeUserFromGroup(@RequestBody final LdapGroup LdapGroup) throws Exception{
// check input data
if(LdapGroup.getUserid().isEmpty()){
logger.warning("The Request-Parameter 'userid:' is missing or empty");
throw new MissingParameter("The Request-Parameter 'userid:' is missing or empty");
}
// some other checks ......
if (ldapAdapter.doesUserExist(LdapGroup.getUserid()) == false) {
logger.warning("Account "+ldapUserGroup.getUserid()+" not exists");
throw new UserAccountDoesNotExistException("Account does not exist");
}
boolean isAssigned = ldapAdapter.isUserAssignedToGroup(LdapGroup.getUserid(), LdapGroup.getGroupid(), LdapGroup.getGroupid());
if (isAssigned == false){
logger.warning("User "+LdapGroup.getUserid()+" is not in the group: "+LdapGroup.getGroupid()+ ","+LdapGroup.getGroupOU());
}
else{
ldapAdapter.removeUserFromGroupWithOu(LdapGroup.getUserid(), LdapGroup.getGroupid(), LdapGroup.getGroupOU());
}
OK!私は別のディレクトリを扱いたいので、私は1つのSpringApplicationでそれらを管理できるアダプタを持っています。一つのクラスは、OpenLDAPのためで、グループからユーザーを除去するための方法は、そのようなものです:
@Override
public void removeUserfromGroup(String groupDN, String userDN) throws LdapException {
try {
ArrayList<ModificationItem> items = new ArrayList<ModificationItem>();
Attribute userAttribute = new BasicAttribute("uniqueMember", userDN);
items.add(new ModificationItem(DirContext.REMOVE_ATTRIBUTE, userAttribute));
doModify(groupDN, items.toArray(new ModificationItem[items.size()]), false);
logger.info("User '" + userDN + "' removed from '" + groupDN + "'");
} catch (LdapException e) {
throw e;
} catch (Exception e) {
throw new LdapException(UNEXPECTED_EXCEPTION, e);
}
}
問題は、私は私のSpringApplicationに残りコールを発射すれば、私はコード500を取得し、今ある:内部サーバーをメッセージなしのエラー。だから、どんな種類のエラーであるかは誰も知らない。私のコンソールでは、 "[LDAP:error code 34 - invalid DN]"のようなLdapExceptionを取得します。これが関連情報です。 このLdap-ExceptionをSpringApplicationにどのように渡すことができますか?最良のケースは、SpringApplication用に異なるExceptions.classesを定義しているため、メッセージを渡すだけです。これらの例外クラスは「例外」から継承します
ありがとうございます!
お返事ありがとうございます。私はあなたのアイデアを実装しようとしています。だから、私は理解して、私のSpringApplicationは "@RestControllerAdvice" - アノテーションをカスタムExceptionResponseで作成します。私はその背後にある考え方を理解しています。 私の場合はまったくそうではありません。 OpenLdapControllerとSpring-Rest-Applicationのリンクはどこにありますか? たとえば、ldap "[LDAP:error code 34 - invalid DN]"というエラー応答は私によって生成されたエラーではないためです。私はこのエラーを他のクラスから傍受する必要があります。 – InfoEngi
私が知る限りでは、例外は、Springアプリケーション、つまりコントローラでインターセプトする必要があります。これは '@ RestControllerAdvice'で注釈を付けたクラスが行うものです。私の理解が間違っている場合は、プロジェクトの構造、コントロールフローなどの*より詳細を質問に更新してください。 –
だから、私は今完成したと思うし、私はあなたの提案した構成で何をしたいと思っているすべてを持っていると思います。どうもありがとうございました! ldap([LDAP:error code 34 - 無効なDN])から例外を傍受することはできませんでしたが、以前はコントローラからの例外がありました。それで初めてです。 – InfoEngi