1、配置 maven 依赖
<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.2.4.Final</version>
</dependency>
#注意在springboot下,validation-api不能引入,否则会报错误
2、工具类
package com.sample.common.utils;
import org.springframework.util.CollectionUtils;
import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import java.util.Map;
import java.util.Set;
public class BeanValidator {
public static <T> boolean validate(T object, Map<String, Object> model){
Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
Set<ConstraintViolation<T>> constraintViolations = validator.validate(object);
if (CollectionUtils.isEmpty(constraintViolations)){
return true;
}else{
for (ConstraintViolation<T> cv : constraintViolations) {
String property = cv.getPropertyPath().toString();
model.put("message", property+cv.getMessage());
}
return false;
}
}
}
3、实体 -- User.java
package com.sample.modules.web.model;
import org.hibernate.validator.constraints.NotEmpty;
public class User {
public interface loginValid{}
@NotEmpty
private String username;
//若填写了groups,则该参数验证只在对应验证规则下启用
@NotEmpty(groups = {loginValid.class})
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
4、使用方式 -- 工具类
package com.sample.modules.web.controller;
import com.sample.common.utils.BeanValidator;
import com.sample.modules.web.model.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.HashMap;
import java.util.Map;
@Controller
public class TestController {
@RequestMapping(value = "/validator")
@ResponseBody
public Map<String, Object> validator(User user){
Map<String, Object> result = new HashMap<>();
BeanValidator.validate(user, result);
return result;
}
}
5、使用方式 -- 注解 @Validated,并分组
package com.sample.modules.web.controller;
import com.sample.modules.web.model.User;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.Valid;
@RestController
public class UserController {
//此处会校验 username 和 password 非空
@RequestMapping(value = "/login")
public String login(@Validated(value = User.loginValid.class) User user){
return "success";
}
//此处会校验 username 非空
@RequestMapping(value = "/register")
public String register(@Valid User user){
return "success";
}
}
6、自定义校验注解
package com.sample.common.validate;
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import static java.lang.annotation.ElementType.*;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
@Retention(RUNTIME)
@Documented
@Constraint(validatedBy = IsQQEmailImpl.class)
public @interface IsQQEmail {
String message() default "email is invalid";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
@Retention(RUNTIME)
@Documented
public @interface List {
IsQQEmail[] value();
}
}
package com.sample.common.validate;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
public class IsQQEmailImpl implements ConstraintValidator<IsQQEmail, String> {
@Override
public void initialize(IsQQEmail constraintAnnotation) {
}
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
return true;
}
}