2017-03-22 17 views
1

私は春の初心者ですので、私にご負担ください。しかし、アノテーションベースの検証が非フォームメソッドにも使用できるかどうかを知りたがっていますか?入力フォームの検証にBindingResultを使用できることはわかっています。しかし、私はこのようなものがあります:スプリングを使用した内部メソッドの注釈付きデータの検証

public class Service{ 
    @NotBlank 
    @Column 
    private String name; 
} 


public class ServiceController{ 
    @PostMapping 
    public Service create() { 
     ... some additional code... 
     return createServiceObject(); 
    } 

    private Service createServiceObject(){ 
     ...some additional code... 
     Service s = new Service(); 
     /* I want Not Blank validation for name to get triggered here */ 
     s.setName(someInputFromForm) 
    } 
} 

をそして私は、私は次のようにそれを手動でチェックするとは対照的に、名前が注釈@NotBlankに基づいて検証を取得したい:name.trim.isEmpty()。これは可能ですか?

+0

フォームの検証に関するいくつかのチュートリアルを参照してください。 – Snickers3192

+0

私は個人的な内部方法で非形式検証をしようとしています。それが質問の理由です。 – tejas

+0

そして、カスタム作成に関するチュートリアルがたくさんあります。独自のアノテーションを使ってフィールドで検証することもできますし、オブジェクトを全体として検証することもできます。例えば、int a、b; a + b <10などの確認ができます。妥当性検査は、Springの2つの領域、シリアル化およびフォームの送信に関係しています。 – Snickers3192

答えて

1

まだ追加していない場合は、LocalValidatorFactoryBeanクラスの新しいbeanをコンフィグレーションに追加してください。あなたはJavaの設定を使用している場合は、何かのように:あなたは、XML設定、使用している場合

@Configuration 
public class AppConfig { 

    ... 

    @Bean 
    public LocalValidatorFactoryBean validatorFactoryBean(){ 
     return new LocalValidatorFactoryBean(); 
    } 

} 

または:あなたはすでにあなたの設定にLocalValidatorFactoryBean Beanを追加した場合

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

を、ちょうど設定このBeanの名前(依存性注入のために必要です)。

今、あなたはバリデータとして、このBeanを使用することができます。

public class ServiceController{ 

    @Autowired 
    @Qualifier("validatorFactoryBean") 
    private LocalValidatorFactoryBean validatorFactoryBean; 

    @PostMapping 
    public Service create() { 
     ... some additional code... 
     return createServiceObject(); 
    } 

    private Service createServiceObject(){ 
     Service service = new Service(); 
     service.setName(someInputFromForm) 

     DataBinder binder = new DataBinder(service); 
     binder.addValidators(validatorFactoryBean); 
     binder.validate(); 
     BindingResult result = binder.getBindingResult(); 
     if(result.hasErrors()){ 
      // here you can throw exception or do something else 
     } 
     return service; 
    } 
} 
関連する問題