ホーム DoRuby 【Java】Bean Validationで条件付きチェック

【Java】Bean Validationで条件付きチェック

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

Javaで条件付きチェックを実装するにあたり、Bean Validationのバリデーショングループを使ってみました。

※Spring Frameworkを使用しています。

 【グループ】

検証グループのインターフェースを作ります。

public interface Role {
	interface Admin {}
	interface General {}
}

 【Bean】

チェック対象のフィールドにグループを指定します。

public class ValidationTestBean {

	private String role;

	@NotEmpty(groups = Admin.class)
	@Size(min = 1, max = 30, groups = General.class)
	private String name;
	
	// getter,setter省略
}

 【コントローラ】

コントローラからバリデータを呼び出します。

@Controller
@RequestMapping({ "/validation/test" })
public class ValidationTestController {

	@Autowired
	private Validator validator;

	@RequestMapping(value = "confirm", method = GET)
	public String confirm(@ModelAttribute("bean") ValidationTestBean bean,
			Errors errors, Model model) {

		// 検証グループ生成
		Object[] groups = createValidationGroups(bean);

		// 入力チェック
		ValidationUtils.invokeValidator(validator, bean, errors, groups);
		if (errors.hasErrors()) {
			return "validation/test/input";
		}
		return "validation/test/confirm";
	}

	private Object[] createValidationGroups(ValidationTestBean bean) {

		List<object> groups = new ArrayList<object>();

		// 条件によりグループを追加
		if ("admin".equals(bean.getRole())) {
			groups.add(Admin.class);
		} else {
			groups.add(General.class);
		}
		return groups.toArray();
	}
}

createValidationGroupsメソッドでグループを追加しています。

このとき、条件により異なるグループを設定することにより、Beanで指定したグループのみバリデーションを実行することができます。

今回割愛しましたが、グループは省略したり複数指定したりも可能です。

グループを活用することにより条件付きチェックをできるだけアノテーションで実装することができました。

記事を共有

最近人気な記事