@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 を破損したくありません....