【Spring】バリデーション(@Validated)を任意のタイミングで実行させる方法

spring

 バリデーション(@Validated)を使えば、非常に簡単にチェック機能を実現できますが、一般的な使い方としては、リクエストを受け取ったタイミングで実行します。
 ただ、処理の途中など、任意のタイミングで実行したいときはどうすれば良いでしょうか?
 調べたら、以下の方法で簡単に実現できます。

SmartValidatorを使って、任意のタイミングで実行

 SmartValidatorをDIし、validateメソッドを呼び出すことでバリデーションが任意のタイミングで実行できます。

import ……
import org.springframework.validation.SmartValidator;

@Controller
public class SampleController {

    @Autowired
    public SmartValidator validator;

    @RequestMapping(value = "/regist", method = RequestMethod.POST)
    public String regist(@ModelAttribute ABCForm requestForm, BindingResult result, Model model) {) {
        
        //色々処理
        ……

        validator.validate(vm, result);
        if (result.hasErrors()) {
            //チェックエラーがある際の処理
            ……
        }
        
        //処理の続き
        ……

    }
}
(参考)リクエストを受け取ったタイミングで実行

 @Validatedを付与することで、入力値のバリデーションが実行されます。バリデーションの結果はBindingResultで受け取れます。

import ……
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;

@Controller
public class SampleController {

    @RequestMapping(value = "/regist", method = RequestMethod.POST)
    public String regist(@ModelAttribute @Validated ABCForm requestForm, BindingResult result, Model model) {
        if (result.hasErrors()) {
            //チェックエラーがある際の処理
            ……
        }

        //処理の続き
        ……
    }
}

コメント

タイトルとURLをコピーしました