2011-01-14 30 views
7

私はJava EEアプリケーションを持っており、日付を検証したいと思います。JSR 303 - javax.validation - 日付を確認する

import javax.validation.constraints.NotNull; 
import javax.validation.constraints.Size; 
... 
@NotNull 
@Size(min = 1, max = 255) 
private String myString; 

しかし、今、私は私が検証したい二つの日付を持っている:私はこれを行う文字列で 。フロントエンドシステムでは、JSONを介して転送されるテキストフィールドに文字列を書き込むことができます(テキストフィールドを使用する必要がありますが、datepickerは使用できません)。

だから私のバックエンドは、自分のドメインクラスでこれを持っているん:

@DateTimeFormat(pattern = "dd.MM.yy") 
@Temporal(value=TemporalType.TIMESTAMP) 
private Date myStartDate; 

@DateTimeFormat(pattern = "dd.MM.yy") 
@Temporal(value=TemporalType.TIMESTAMP) 
private Date myEndDate; 

私はフォーマット「DD.MM.YYYY」に対して検証したいと思います。これはどうすればできますか?

私はそうは思わないが、開始日が終了日より前であるかどうかを確認するための自動検証はありますか?私は@Future@Pastしか見つけませんでした。

唯一の解決策は、正規表現@Patternを使用することです。

お手数ですが、よろしくお願いします。

+2

いくつかの事柄: '@ DateTimeFormat'はJSR-303の一部ではなく、' mm'は数ヶ月ではなく月を表します。 '' dd.MM.yy ""から "" dd.MM.yyyy "'への変更はどのように失敗するのでしょうか? Spring MVC(このアノテーションが含まれています)を使用しているように思われるので、あなたの質問を修正/再タグすることができます。少なくとも、JSR 303は、このために[any](http://download.oracle.com/javaee/6/api/javax/validation/constraints/package-summary.html)アノテーションを提供していません。 – BalusC

+0

はい、 'dd.MM.yyyy'に変更できますが、検証はありません。 – Tim

+0

また、 'Date'は内部フォーマットに関する情報を保存しないので、パターン検証が' String'の代わりに 'Date'にどのように役立つのか理解できません。とにかく、私は春はしませんが、あなたは[Validator](http://static.springsource.org/spring/docs/3.0.x/reference/validation.html)を実装する必要があると思います。少なくともJSFの場合はどうすればいいのですか。 – BalusC

答えて

3

@DateTimeFormatは、リクエストパラメータをオブジェクトにマッピングするときに使用します(<mvc:annotation-driven/>で有効にした場合や手動でマッピングする場合)。JSONをオブジェクトに逆シリアル化するときに一般的には使用されません。あなたはJSONでどのように読んでいますか?あなたはそれを逆シリアル化するために何を使用していますか?あなたは、書式設定の事実の後にjava Dateオブジェクトを検証することはできません。逆シリアル化の前に正面を調べる必要があります。

複数のフィールドの制約はありません。オブジェクトの2つのプロパティを比較する場合は、独自のタイプレベル制約を作成することをお勧めします。

+0

あなたの返事ありがとうございます。私は '@Pattern(regexp =" \ t(0 [1-9] | [12] [0-9] | 3 [01])[ - /。](0 [1-9] | 1 [012])[ - /。(19 | 20)\ d \ d \ t ")'、しかし無効なエスケープシーケンスであるというエラーがあります。システムでは、私は "バックエンドマスター"だけで、日付形式が大丈夫かどうかをチェックする必要があるので、パターンは最初のステップで十分です。 – Tim

+0

\は既にJava正規表現で\\すべて\ regexエンジンに行く前に、Java文字列のエスケープ文字。 – Affe

関連する問題