我有一个用户模式
public class RegisterUser {
@Size(min = 2, max = 30)
private String fname;
@Size(min = 2, max = 30)
private String lname;
@NotEmpty
@Size(min = 6, max = 15)
private String password;
....
@NotEmpty
private String publicProfile;
... getters and setters
}
1)我想在注册操作期间使用此模式(fname,lname,password等但没有publicProfile字段)
2)我想在myprofile操作期间使用此模式(除密码以外的所有字段)
我的注册行动:
@RequestMapping(value = "/register", method = RequestMethod.POST)
public String submitRegisterForm(
@Valid RegisterUser registerUser,
BindingResult result,
Model m) {
....
}
我不打算提供公共资讯'在jsp上,因此我不想验证这个字段,尽管我的模态有@NotEmpty注释
我对myprofile的行动
@RequestMapping(value = "/myprofile", method = RequestMethod.POST)
public String submitMyprofileForm(
@Valid RegisterUser registerUser,
BindingResult result,
Model m) {
....
}
此处我并不打算提供密码' jsp上的字段,因此我不想验证这个字段,尽管我的模态有@NotEmpty和@Size(min = 6,max = 15)注释
我的问题是如何实现这一目标? 有什么方法我可以在这个模式中说这个动作只验证提到的字段吗?
提前致谢 MANISHA
答案 0 :(得分:1)
我不知道Bean验证是否可行,但您可以为不同的请求参数设置Spring's Validation Interface的不同实现。
@RequestMapping(value = "/register", method = RequestMethod.POST)
public String submitRegisterForm(@Valid RegisterUser registerUser, ...
和
@RequestMapping(value = "/register", method = RequestMethod.POST)
public String submitMyprofileForm(@Valid RegisterUser registerUserProfile, ...
然后您可以使用@InitBinder
将不同的验证程序连接到您的请求参数。您可以将这些方法添加到控制器中。只需在第二个Validator中省略您不想要的验证。
@InitBinder("registerUser")
protected void initUserBinder(WebDataBinder binder) {
binder.setValidator(new RegisterUserValidator());
}
@InitBinder("registerUserProfile")
protected void initUserBinderProfile(WebDataBinder binder) {
binder.setValidator(new RegisterUserProfileValidator());
}
然后你需要手动完成注释。您还可以为验证器使用继承,因为它们完全相同,只是注册表单的一个附加字段验证。
public class RegisterUserValidator implements Validator {
public boolean supports(Class clazz) {
return RegisterUser.class.equals(clazz);
}
public void validate(Object obj, Errors e) {
ValidationUtils.rejectIfEmpty(e, "publicProfile", "empty");
RegisterUser r = (RegisterUser) obj;
if (r.getFname().length() < 2) {
e.rejectValue("fname", "min");
} else if (r.getFname().length() > 30) {
e.rejectValue("fname", "max");
}
// ...
}
}
答案 1 :(得分:0)
您可以使用Validation Groups(针对不同的方案)和Spring的@Validated注释来指定您要使用的组