バリデーション(@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()) {
//チェックエラーがある際の処理
……
}
//処理の続き
……
}
}
コメント