1

@Valid タグと適切な使用法を理解するのに問題があります - 助けていただければ幸いです!

Duck で単純な CRUD 操作を行う REST コントローラーがあるとします (説明するために何かを使用する必要があります!)。アヒルの作成と更新を見てみましょう。どちらの場合も、最初に Duck を作成するために Duck 全体を渡す必要があります。次に、そのデータ項目のいずれかを変更できるためです。したがって、これらのメソッドは次のようになります。

@RequestMapping(value = "/ducks", method = RequestMethod.POST)
@ResponseBody
public ResponseEntity<Duck> createDuck(@Valid @RequestBody Duck duck) {  ... }

@RequestMapping(value = "/ducks/{duckId}", method = RequestMethod.PUT)
@ResponseBody
public ResponseEntity<Duck> updateDuck(@Valid @RequestBody Duck duck) { ... }

各呼び出しを検証したいので、各パラメーターに「@Valid」を挿入しました。@Valid タグは、食物連鎖のさらに下にある異種の JSR 303 アノテーションを使用するのではなく、受信時にオブジェクト全体を検証できるため、ここでは魅力的です。(おそらく) このコントローラーには Duck を使用しない他のメソッドがあるため、次のように @Valid を有効にします。

@InitBinder("duck")
protected void initBinder(DataBinder binder) {
    binder.setValidator(new MyDuckValidator());
}

MyDuckValidator は org.springframework.validation.Validator インターフェースを実装します。

問題は、「更新されたダック」で渡された Id (主キー) が非 Null であることを検証することです。しかし、ダックを作成するとき、その Id が null であることは完全に有効です。これは「検証 101」のように思えますが、どの例やドキュメントからも理解できないようです。簡単な解決策を知っている人はいますか?2 つのバリデーターがあり、それらを接続してもかまいません。ただし、検証を回避するためだけに API を破損したくありません....

4

0 に答える 0