JSR303完成validate校驗並編寫BeanValidator工具類

1、引入pom依賴java

<!-- validator -->
<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>

2、針對須要驗證的字段封裝爲TestVojson

@Data
public class TestVo {

    @NotNull
    private Integer id ;

    @NotBlank
    private String name;
}

3、工具類BeanValidator編寫api

 1 public class BeanValidator {
 2 
 3     private static ValidatorFactory validatorFactory = Validation.buildDefaultValidatorFactory();
 4 
 5     /**
 6      * 校驗對象
 7      * @param t 對象的泛型
 8      * @param groups
 9      * @param <T>
10      * @return
11      */
12     public static <T>Map<String,String> validate(T t,Class... groups){
13         Validator validator = validatorFactory.getValidator();
14         Set validateResult = validator.validate(t, groups);
15         if(validateResult.isEmpty()){
16             return Collections.emptyMap();
17         }else {
18             LinkedHashMap errors = Maps.newLinkedHashMap();
19             Iterator iterator = validateResult.iterator();
20             while (iterator.hasNext()){
21                 ConstraintViolation violation = (ConstraintViolation) iterator.next();
22                 errors.put(violation.getPropertyPath().toString(),violation.getMessage());
23             }
24             return errors;
25         }
26     }
27 
28     /**
29      * 校驗集合
30      * @param collection 集合
31      * @return
32      */
33     public static Map<String,String> validateList(Collection<?> collection){
34         Preconditions.checkNotNull(collection);
35         Iterator iterator = collection.iterator();
36         Map errors;
37         do{
38             if (!iterator.hasNext()) {
39                 return Collections.emptyMap();
40             }
41             Object object = iterator.next();
42             errors = validate(object,new Class[0]);
43         }while (errors.isEmpty()); // 若是errors爲空則循環校驗,一旦不爲空   跳出循環
44         return errors;
45     }
46 
47     /**
48      * 通用方法,至少傳入一個Object參數
49      * <p>校驗參數以後不會處理只會將錯誤信息存儲到map中
50      * @param first
51      * @param objects
52      */
53     public static Map<String,String> validateObject(Object first,Object... objects){
54         if(objects == null || objects.length == 0){
55             return validate(first,new Class[0]);
56         }else {
57             return validateList(Lists.asList(first,objects));
58         }
59     }
60 
61     /**
62      * 校驗參數是否合法
63      *  <p>當校驗參數不合法時拋出異常讓程序不能繼續執行
64      * @param param
65      * @throws ParamException
66      */
67     public static void check(Object param)throws ParamException{
68         Map<String, String> map = validateObject(param);
69         if(MapUtils.isNotEmpty(map)){
70             throw new ParamException(map.toString());
71         }
72     }
73 }
View Code

4、Controller類中調用並測試app

 

@Controller
@Slf4j
@RequestMapping("/test")
public class TestController {

    @RequestMapping("/testVo.json")
    @ResponseBody
    public String testVo(TestVo testVo)throws ParamException{
        log.info("testVo");
        Map<String, String> map = BeanValidator.validateObject(testVo);
        if(MapUtils.isNotEmpty(map)){
            for(Map.Entry<String,String> entry :map.entrySet()){
                log.error("error==={}-->{}",entry.getKey(),entry.getValue());
            }
        }
        //BeanValidator.check(testVo);
        return "hello world";
    }

}

 

運行就會輸出這樣的日誌信息:ide

相關文章
相關標籤/搜索