2016-07-02 8 views
0

私はSpring BootとJPAを使用してRESTサービスを作成しています。私は入力フィールドのいくつかを検証する必要があり、そうするために適切なパターンを使用していることを確認したい。Spring REST入力の検証

のは、私は以下のモデルを持っていると私はまた、モデルを制御することはできませんと仮定しましょう:私が行う必要がある

{ 
    "company" : "ACME" 
    "record_id" : "ACME-123" 
    "pin"  : "12345" 
    "company_name" : "" 
    "record_type" : 0 
    "acl"   : ['View','Modify'] 
    "language"  : "E" 
} 

ものがあります:

  1. は、値が空でないことを確認 - これを@NotEmptyアノテーションを使って十分に単純なように見え、メッセージを渡すことができます。
  2. 値が有効な値リストの一部であることを確認します。ここの例は、上記のモデルの言語プロパティです。値はE、F、Sのいずれかになります。これはカスタムアノテーション(@ValidValue({"E"、 "F"、 "S"})など)を使用して可能ですが、より良い/ "Springy"これをする?
  3. リスト内の値が有効な値リストの一部であることを確認します。ここでの例はaclプロパティです。これは@ValidListValues({"View"、 "Modify"、 "Delete"、 "Hide"})のようなカスタムアノテーションでも可能ですが、上記と同じ質問です。
  4. デフォルト値を設定する - 私が読んだところから、カスタムバリデータアノテーションは検証のみを行い、変更はできません。値がnullの場合@DefaultValue(value = 5)のようなことをしたいと思います。これは可能ですか?もっと詳しくはこちら。
  5. 静的メソッドのリターンにデフォルト値を設定します。たとえば、上記のモデルのピンフィールドが設定されていない場合、Util.getRandomDigitsAsString(5)のように設定します。
  6. 別のプロパティの値を使用する - あるプロパティに別のプロパティの文字列が含まれていることを検証したいと思います。サンプルモデルを使用して、record_idがcompanyで始まることを確認します。

私は、コントローラ - >サービス - > DTO - > DAO - > Modelの標準的な方法と考えてこの設定をしています。私が考えていた別のオプションは、上記のすべての項目を通過し、必要に応じて例外をスローするメソッドvalidateCreate()を作成することでした。

ありがとうございました。

答えて

1
  1. はい、NotEmptyはあなたがLanguage列挙型を定義する必要があります

  2. 正しい方法です。 POJOの言語フィールドは、言語タイプ

  3. と同じである必要があります。Acl列挙型を定義してください。

  4. これをJavaコードで定義します。デフォルトでは、フィールドの値を5に初期化します。 JSONに値が含まれている場合、Jacksonはフィールド値をJSONの値に設定します。それ以外の場合は、5のままです。フィールドをnullに初期化し、値がnullの場合に必要なデフォルト値を返すメソッドgetValueOrDefault(int defaultValue)を追加します。 4

  5. と同じ

  6. ではなく、クラスのプロパティでは、クラス自体に適用されるカスタムバリデータを定義します。バリデーターchecでは、2つの関連する値が正しいことを示します。

+0

ありがとうございます。私はこれらのすべてのショットを与えるでしょう。これらはDTOかモデルで行うべきですか? – aaronanderson