その他
    ホーム 技術発信 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で指定したグループのみバリデーションを実行することができます。

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

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