1. ホーム
  2. java

[解決済み] Springにおける@Validと@Validatedの相違点

2022-06-07 15:19:43

質問

Springは2つの異なる検証方法をサポートしています。SpringのバリデーションとJSR-303のビーンバリデーションです。どちらも、Springバリデータを定義して、ビーンバリデータを含む他のデリゲータに委譲することで使用できます。ここまでは良いですね。

しかし、実際に検証を要求するメソッドにアノテーションをつけるとなると、話は別です。次のようなアノテーションをつけることができます。

@RequestMapping(value = "/object", method = RequestMethod.POST)
public @ResponseBody TestObject create(@Valid @RequestBody TestObject obj, BindingResult result) {

または次のようになります。

@RequestMapping(value = "/object", method = RequestMethod.POST)
public @ResponseBody TestObject create(@Validated @RequestBody TestObject obj, BindingResult result) {

ここで、@Validは javax.validation.Validです。 であり、@Validatedは org.springframework.validation.annotation.Validated となります。 . 後者のdocsには

JSR-303のValidの亜種で、検証グループの指定をサポートする。 のグループです。SpringのJSR-303サポートで便利に使えるように設計されているが、JSR-303に特化したものではない。 JSR-303に特化したものではありません。

とありますが、どう違うのかがはっきりしないので、あまり役に立ちません。もしそうなら。どちらも私にとってはかなりうまく機能しているようです。

どのように解決するのですか?

ドキュメントから引用したように @Validated は、quot;validation groups"、すなわち、検証されたビーン内のフィールドのグループをサポートするために追加されました。これは、最初のステップで名前、電子メールなどを検証し、次のステップで他のフィールドを検証するような、複数ステップのフォームで使用することができます。

に追加されなかった理由は @Valid アノテーションに追加された理由は、Javaコミュニティのプロセス(JSR-303)を使って標準化されており、それには時間がかかるため、Spring開発者はこの機能を早く使えるようにしたいと考えたからです。

次のページに移動します。 このJiraチケット をクリックすると、アノテーションがどのように作成されたかを見ることができます。