在Spring Boot中,如果我们需要访问后台数据进行验证,可以自定义验证,下面是一个自定义登录验证,当uid在数据库中存在时,验证失败

前提条件:表单功能已经写好

  1. 新建自定义验证的类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");
		}
		
	}

}
  1. 将自定义验证类与controller进行绑定
    controller中加入下面方法:
@InitBinder
    public void bindValidator(DataBinder dataBinder) {
        dataBinder.setValidator(new RegisterValidators(customerServices));
    }
  1. 修改表单功能的controller方法,例如注册:
    4. 在页面中加入验证内容,我这里是jsp页面,所以加入如下错误提示代码:
<form:errors path="uid"/>
<form:errors path="pwd"/>

CustomerForm中的两个字段名称必须与path中的内容一致。