一.不用springboot,使用validation参数校验需要自己写ValidationUtil工具类,来校验
public class ValidatorUtil {
private static Validator validator = Validation.buildDefaultValidatorFactory()
.getValidator();
public static <T> Map<String,StringBuffer> validate(T obj){
Map<String,StringBuffer> errorMap = null;
Set<ConstraintViolation<T>> set = validator.validate(obj,Default.class);
if(set != null && set.size() >0 ){
errorMap = new HashMap<String,StringBuffer>();
String property = null;
for(ConstraintViolation<T> cv : set){
//这里循环获取错误信息,可以自定义格式
property = cv.getPropertyPath().toString();
if(errorMap.get(property) != null){
errorMap.get(property).append("," + cv.getMessage());
}else{
StringBuffer sb = new StringBuffer();
sb.append(cv.getMessage());
errorMap.put(property, sb);
}
}
}
return errorMap;
}
在测试类中的使用方法(片段)
public static void main(String[] args) {
StudentInfo s = new StudentInfo();
long startTime = System.currentTimeMillis();
print(ValidatorUtil.validate(s));
System.out.println("===============耗时(毫秒)=" + (System.currentTimeMillis() - startTime));
二.使用springboot需要加上注解@Validated和引入相关依赖
<!--validate 依赖-->
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>1.1.0.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.4.1.Final</version>
</dependency>
<dependency>
<groupId>org.jboss.logging</groupId>
<artifactId>jboss-logging</artifactId>
<version>3.3.0.Final</version>
</dependency>
<dependency>
<groupId>com.fasterxml</groupId>
<artifactId>classmate</artifactId>
<version>1.3.3</version>
</dependency>
1.使用@valid + BindingResult来处理,并且要在controller里面写关于bindingresult返回结果的判断来打印信息 (太麻烦)
@PostMapping("/UserRegister")
@ApiOperation("用户注册")
public Object userRegister(@Valid UserRegisterForm registerForm, BindingResult bindingResult) {
return userService.UserRegister(registerForm, bindingResult);
}
2.使用全局异常处理,在controller里加上@valid注解即可,不需要bindingresult,也不用判断bindingresult返回的值(推荐)
@ControllerAdvice
public class ValidationUtil{
@ExceptionHandler(org.springframework.validation.BindException.class)
@ResponseBody
public ResultVO handleEx(BindException e){
List<FieldError> fieldErrors = e.getFieldErrors();
StringBuilder sb = new StringBuilder();
for(FieldError fe: fieldErrors){
sb.append("属性:").append(fe.getField()).append("校验不通过:").append(fe.getDefaultMessage()).append("; ");
}
log.info("参数错误 : "+sb);
return ResultVOUtil.error(sb);
}
}
测试代码:
@Data
public class LoginForm {
@NotNull(message = "手机号不能为空")
@ApiModelProperty("手机号")
private String phone;
@NotNull(message = "密码不能为空")
@ApiModelProperty("密码")
private String password;
@NotNull(message = "验证码不能为空")
@ApiModelProperty("验证码")
private String securityCode;
// @NotNull(message = "验证码不能为空")
// @ApiModelProperty("验证码")
// private String securityCode;
}
运行案例: