0

ユーティリティメソッドでRestletURLからの入力を検証しています(そうすれば、実行する動作が変更された場合、1か所だけ変更します)。LegalNameは、基本的に値がalphaNumericであることを検証しますが、他の文字をすぐに許可する可能性があります。

私は自分の例外を意味のあるものに保つようにしています-このシナリオではどの例外が最適でしょうか?

public static String getProperty(Request request, String key) {
    String value = request.getAttributes().get(key).toString();
    // unless something is specifically text, it is a property
    if(legalName(value)) return value;
    throw new IllegalArgumentException(value);

}

私の考えは次のとおりです。

  • IllegalArgumentException-キーが直接無効な結果につながる
  • IllegalStateException-不適合な値を使用しようとしています
  • 例外なし-空の文字列を返し、違反があったという事実をログに記録します
  • 例外なし-不要な文字を削除し、サニタイズされた文字列を返し、事実をログに記録します

確かに私は前に入力を検証しなければならない最初の人ではありません:-)

4

3 に答える 3

2

このような例外は、プロパティが取得されるのではなく、保存されるときにスローされる必要があります。そのためのRestlet検証を確認してください。

あなたがあなたの解決策に固執することを好むなら:

  • メソッドの名前をに変更しvalidateName(..)、例外をスローさせます。そうでない場合は、値を返します。
  • javax.validation.ValidationExceptionより良いオプションに見えますが、あなたがIllegalXException言及した2つのいずれかを使用することができます。より詳細なメッセージがあることを確認してください。
于 2011-07-17T15:57:20.953 に答える
1

これは無効なユーザー入力のように見えるので、最初に、ある種のValidationExceptionを探して、すべてを自分で管理するのではなく、検証フレームワークを使用します。ValidationExceptionでない場合、IllegalArgumentExceptionは、リストされた選択肢の中でおそらく最も理にかなっています。

于 2011-07-17T15:56:18.567 に答える
0

Custom(Your Own)Exception Classを利用できます。状況や検証に応じて、適切なメッセージを表示してスローできます。例の場合:1。不正な引数の場合例外の場合try catchでそのコードのブロックを処理し、catchで独自のExceptionwithProperメッセージをスローします。

于 2011-07-17T16:02:07.080 に答える