私たちのプロジェクトでは、少し異なるアプローチを取りました。また、Spring 3.1 を使用しており、検証とカスタム検証で注釈が付けられた両方の Bean があります。Spring 3.1に移行する前に最初に使用した方法がわからないため、私たちのアプローチはあなたのシナリオに当てはまる場合と当てはまらない場合がありますが、ここでは.
カスタム検証が必要な場合は、LocalValidatorFactoryBean を拡張する代わりに、org.springframework.validation.Validator クラスを実装します。したがって、この実装は独自のカスタム コードを実行し、Spring のデフォルトの検証を呼び出します。この検証は、カスタム バリデーターに自動配線された Bean を介して公開されます。バリデータコードは次のとおりです。
@Component("myValidator")
public class MyValidator implements Validator {
@Autowired
private Validator springValidator;
@Override
public boolean supports(Class<?> clazz) {
return MyObject.class.isAssignableFrom(clazz);
}
@Override
public void validate(Object object, Errors errors) {
MyObject myObject = (MyObject) object;
// invoke spring default validator so validation annotations are processed
springValidator.validate(myObject, errors);
// custom validation
....
そして、Spring xml ファイルで宣言された次の Bean があります。
<bean id="springValidator"
class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"/>
上記の実装では、バリデーションを呼び出す必要があるクラスは、validator.validate(Object object, Errors errors) を呼び出すことによってそうします。繰り返しますが、同じ validate(Object, Errors) メソッドを使用していたかどうかわからないため、私たちのプロジェクトで採用されたアプローチがあなたのプロジェクトに適用されるかどうかわかりません。
とにかく、それが役立つことを願っています。