web-dev-qa-db-ja.com

Spring検証とHibernate検証

私は今、この2つを混同しています。 Hibernate Validator 6がBean Validation 2.0仕様のリファレンス実装であることは知っています。グループ化、エラーメッセージの国際化、カスタムメソッド検証などをサポートしています。質問は、Spring 5はこれらの機能をサポートしていますか、それともHibernate Validator 6のみが残っていますか?

提供されているSpring Validationではなく、Hibernate ValidatorとSpring Bootプロジェクトを一緒に使用する必要があるのはなぜですか?私の会社には、サードパーティのライブラリを使用する正当な理由が必要です。

オンラインの参考例はすべて、Hibernate Validatorを使用することを提案していますが、Springの検証にはあまり見当たりません。他のリンクをアドバイスするか、ポイントしてください。

12
Nova Guy

Spring Validation documentation

Bean Validationでは、通常、単一のjavax.validation.Validatorインスタンスが、検証制約を宣言するすべてのモデルオブジェクトを検証します。このようなJSR-303をサポートするValidatorをSpring MVCで構成するには、Hibernate ValidatorなどのBean Validationプロバイダーをクラスパスに追加するだけです

spring-boot-starter-web依存関係を持つサンプルスプリングブートプロジェクトを作成することで、それを確認できます。実際に、クラスパスにhibernate-validator依存関係を追加します

以下に、春のチュートリアルのjsr-303へのリンクをいくつか示します。

  1. https://howtodoinjava.com/spring/spring-mvc/spring-bean-validation-example-with-jsr-303-annotations/

  2. https://www.mkyong.com/spring-mvc/spring-3-mvc-and-jsr303-valid-example/

5
Alex M981

Hibernate Validationは、JSR 303:Bean Validation APIの実装です。 Springには検証パッケージがあります(JSR 303:Bean Validation APIをサポートしていますが、適切な実装はサポートしていません)。

org.springframework.validation.Validatorjavax.validation.Validatorとは異なることに注意してください。

here のような単純なorg.springframework.validation.Validatorを実装するクラスを作成するだけで、Spring Validationを実行できます。ただし、JSR 303:Bean Validation APIの仕様に従う必要がある場合は、Hibernate Validatorを使用します。

詳細を入力してください。

1)(一部の)検証を実行する場合、これはspringを使用して実行できます。 (以下はスニペットです):

import org.springframework.validation.Validator;

class MyService{
     Validator validator =  new MyValidator();
     //perform validation
    }
class MyValidator implements Validator{
    // Your own validation logic. You may use ValidationUtils to help. 

}

2)(JSR 303仕様)検証を実行する場合は、Hibernateのようなプロバイダーが必要です。

import javax.validation.Validator;
class MyService{
        ValidatorFactory factory = Validation.buildDefaultValidatorFactory(); //Bootstraping
        Validator validator = factory.getValidator(); 
       //perform validation
}

上記のブートストラッププロセスは、Spring Frameworkでサポートされています。あなたがする必要があるのは、春にLocalValidatorFactoryBeanのBeanを作成させることです

<bean id="validator"   
 class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"/>

このBeanを注入します。

import javax.validation.Validator;

@Service
public class MyService {

    @Autowired
    private Validator validator;
}
2
sql_dummy