2012-03-26 20 views
0

私は、このフィールドがnullでない数値であるために、達成しようとしている要求の数値変数を検証しようとしています。 nullと変換エラーについて異なるエラーが報告されるようにしたい。注釈ベースのリクエストの検証

私はなぜ@NumberFormatは、デフォルトのメッセージのプロパティを持っていないいないorg.springframework.format.annotation.NumberFormat

を使用しようとしていましたか?これが欠落した理由はありますか?メッセージリソースバンドルを使用していないのでカスタマイズする必要があります。

public class AddToJobsShortListWSRequest implements Serializable { 

@NumberFormat(style = NumberFormat.Style.NUMBER) 
@NotNull(message="ASL01") 
private Long userDetailId; 

コントローラ

public ResponseEntity<String> handlePostRequest(String xmlRequest, String... externalIds) { 

    ResponseEntity<String> response = null; 
    Set<Enum> enums = new HashSet<Enum>(); 
    AddToJobsShortListWSRequest addToJobsShortListWSRequest = serializationDeserializationSupport.fromString(xmlRequest, AddToJobsShortListWSRequest.class); 

    if(!jsonRequestValidator.validate(AddToJobsShortListWSError.class, enums, addToJobsShortListWSRequest)) 
    { 
     response = getBadRequestErrorResponseEntity(enums); 
    } 
    else{ 
..... 
} 

バリ

private void validate(@SuppressWarnings("rawtypes") Class enumClass, Object object, @SuppressWarnings("rawtypes") Set<Enum> enums) { 
    BindException errors = new BindException(object, "object"); 

    validator.validate(object, errors); 

    @SuppressWarnings({"rawtypes"}) 
    List fieldErrors = errors.getFieldErrors(); 

    for (int i = 0; i < fieldErrors.size(); i++) { 
     if (fieldErrors.get(i) instanceof FieldError) { 
      String m = ((FieldError) fieldErrors.get(i)).getDefaultMessage(); 
      enums.add(Enum.valueOf(enumClass, m)); 
     } 
    } 
} 

他のアノテーションベースの検証がここに該当ありますか? また、まず検証の順番は何ですか?NumberFormat、NotNull?事前に

感謝:)

+0

コントローラのコードとエラーメッセージを投稿できますか? –

+0

は、http://stackoverflow.com/questions/149506/annotation-based-spring-bean-validationの重複した質問かもしれません – kandarp

答えて

1

はそれを見逃していなかった - 検証が必要よりもちょうどより簡単で、春には、唯一の国際化施設としてメッセージリソースバンドルをサポートしています。

あなたの特殊なケースでは、あなたにとっては特別ではないかもしれません。 - 特別な実装が必要です。

また、検証の順序は保証されていません。各検証では、処理できないすべてのケースに対処する必要があります(したがって、数値検証では空の値とNULL値を使用する必要があります。これは、他の検証によってチェックされるためです)。

私は、@NotNullまたは@NotEmptyのような非常に単純なhello-worldタイプの場合に便利なアノテーションベースの検証を見つけました。それ以外のものについては、commons validatorと私の独自の注釈を好むのは、私が自分のアプリに必要なパターンと共通のバリデーションを定義して、それを定義した順序で実行できるからです。

+0

あなたはそうです、私はちょうどそのような場合に気付きました - 春はメッセージリソースバンドルをi18n機能としてサポートしています。だからそれはjsr-303とは異なるところです ありがとう –

関連する問題