Java后端校验-使用hibernate-validator校验JavaBean
只进行前端校验及其不安全,规范的验证都是前后端都进行表单校验,下面介绍使用hibernate-validator进行后端校验。
1.添加相关依赖
org.hibernate hibernate-validator 4.3.1.Final javax.validation validation-api 1.0.0.GA org.jboss.logging jboss-logging 3.1.0.CR2
2.定义公共验证类
import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Set; import javax.validation.ConstraintViolation; import javax.validation.Validation; import javax.validation.Validator; import org.hibernate.validator.HibernateValidator; /** * * @author Leave * */ public class ValidationUtils { /** * 使用hibernate的注解来进行验证 * */ private static Validator validator = Validation .byProvider(HibernateValidator.class).configure().failFast(true).buildValidatorFactory().getValidator(); /** * * * Task: * @param obj * @return * date: 2018年7月5日 * @author pengLuo * */ public staticMap validate(T obj) { StringBuffer buffer = new StringBuffer(); //用于存储验证后的错误信息 Map map = new HashMap (); Set > constraintViolations = validator.validate(obj); // 抛出检验异常 if (constraintViolations.size() > 0) { Iterator > iter = constraintViolations.iterator(); while (iter.hasNext()) { String message = iter.next().getMessage(); buffer.append(message); } map.put("isValid", false); map.put("msg", buffer.toString()); return map; } else { map.put("isValid", true); return map; } } }
3.在JavaBean中使用注解定义验证规则
@NotEmpty(message="姓名不能为空!") private String name; @Pattern(regexp = "\\d{3,4}-\\d{7,8}(-\\d{3,4})?", message = "电话号码格式错误") private String tel; @Pattern(regexp = "1[3|4|5|6|7|8|9]\\d{9}", message = "手机号码格式错误!") private String moble; @Pattern(regexp = "([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+", message = "邮箱格式错误!") private String email;
4.校验JavaBean,通过ValidationUtils的校验结果,可以详细的知道哪个字段验证失败,将结果返回给前端交互。
......//控制器或者服务中进行持久化之前校验
MapvalMap = ValidationUtils.validate(addressBook); //封装返回参数,例如status,msg,code等 AliJson json = new AliJson(); if((Boolean)valMap.get("isValid")){ json = addressBookServices.saveAddressBook(addTxlUtils(request, addressBook)); }else{ json.getJsonFalse(json, valMap.get("msg").toString()); }
......
常用的注解大家可以自己百度,谢谢,本人很菜,不接受批评,哈哈哈。