在Spring Boot中,如果我们需要访问后台数据进行验证,可以自定义验证,下面是一个自定义登录验证,当uid在数据库中存在时,验证失败
前提条件:表单功能已经写好
- 新建自定义验证的类RegisterValidators
package com.oneonone.validators;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import org.springframework.validation.Errors;
import org.springframework.validation.Validator;
import com.oneonone.entities.Customer;
import com.oneonone.forms.CustomerForm;
import com.oneonone.services.CustomerServices;
@Component
public class RegisterValidators implements Validator {
private CustomerServices customerServices;
public RegisterValidators(CustomerServices customerServices) {
this.customerServices = customerServices;
}
@Override
public boolean supports(Class<?> clazz) {
// TODO Auto-generated method stub
return CustomerForm.class.equals(clazz);
}
@Override
public void validate(Object target, Errors errors) {
// TODO Auto-generated method stub
CustomerForm userForm = (CustomerForm)target;
String uid = userForm.getUid();
String pwd = userForm.getPwd();
//uid为空
if(uid==null || uid.isEmpty()) {//uid 为空
errors.rejectValue("uid", "uid.required");
}else {
Customer customer = customerServices.findCustomerByID(uid);
if(customer != null) {
errors.rejectValue("uid", "uid.reduplicated");
}
}
//password为空
if(!StringUtils.hasText(pwd)) {
errors.rejectValue("pwd", "password.required");
}
}
}
- 将自定义验证类与controller进行绑定
controller中加入下面方法:
@InitBinder
public void bindValidator(DataBinder dataBinder) {
dataBinder.setValidator(new RegisterValidators(customerServices));
}
- 修改表单功能的controller方法,例如注册:
4. 在页面中加入验证内容,我这里是jsp页面,所以加入如下错误提示代码:
<form:errors path="uid"/>
<form:errors path="pwd"/>
CustomerForm中的两个字段名称必须与path中的内容一致。