1

以下のように、コントローラーから例外をスローしています

try {
    if (formValidationResult.size() > 0) {
        validationResults.put(errorMsg, formValidationResult);
    }
} catch (Exception exception) {
    LOGGER.error("Error while performing validation in FormController -->"
                    + exception.getMessage());
    throw new ServiceException(exception.getMessage());
}
if (validationResults.size() > 0) {
    throw new ValidationFailureException(validationResults,"Validation Error");
}

ここで、検証エラーが発生します。

com.ge.dbt.common.exception.ValidationFailureException: 検証エラー

hereをキャッチするために catch ブロックを含めることはできValidationFailureExceptionますか?

4

2 に答える 2

5

はい Java 許可します。try catch ブロックを使用して例外をスローおよび処理できます。

   try
    {
        throw new Exception();
    }
    catch (Exception e) {
        // TODO: handle exception
    }

ここでは、同じブロックで例外をスローして処理しています。なぜそんなことをしたいのか、私にはわかりません。

より良い方法は、メソッドを次のように定義しthrows ValidationFailureException、このコードを呼び出している関数からの例外を処理することです。

于 2012-10-03T12:31:24.627 に答える
1

validationResult と formValidationResult がコレクションであると仮定すると、サイズへの呼び出しを囲み、メソッドを try catch ブロックに入れる必要がある理由がわかりません。とにかく、これらのコレクションのサイズを確認したり、新しい値を挿入したりするときに、どのような例外が予想されますか?

携帯電話から入力しているため、コードを提供できませんが、次のことができます。

  1. コードを含むメソッドがメソッド シグネチャで ValidationFailureException をスローすることを示します。

  2. 提示した try catch ブロックを削除し、validationResult が空でないかどうかをチェックする if ブロックと if ブロック内のコードを削除します。

  3. formValidationResult が空でない場合は、エラー メッセージを validationResult に格納し、ValidationFailureException をスローします。

それでおしまい。クリーンでシンプル。try-catch ブロックは不要で、ValidationFailureException をスローする前に validationResult が空でないかどうかを個別に確認する必要もありません。

于 2012-10-03T19:43:51.917 に答える