javax.validation使用最佳實踐

之前講過validation結合spring用法,其中包含註解的含義,這次就不一一說明,鏈接地址:javax.validation結合spring最佳實踐
今天說一說validation的另一種用法,這種用法更加簡單便捷
校驗工具類:

package com.alibaba.banff.web.util;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.groups.Default;

/**
 * 校驗工具類
 * 
 * @author lizhilong
 */
public class ValidationUtils {

    private static Validator validator = Validation.buildDefaultValidatorFactory().getValidator();

    public static <T> ValidationResult validateEntity(T obj) {
        ValidationResult result = new ValidationResult();
        Set<ConstraintViolation<T>> set = validator.validate(obj, Default.class);
        // if( CollectionUtils.isNotEmpty(set) ){
        if (set != null && set.size() != 0) {
            result.setHasErrors(true);
            Map<String, String> errorMsg = new HashMap<String, String>();
            for (ConstraintViolation<T> cv : set) {
                errorMsg.put(cv.getPropertyPath().toString(), cv.getMessage());
            }
            result.setErrorMsg(errorMsg);
        }
        return result;
    }

    public static <T> ValidationResult validateProperty(T obj, String propertyName) {
        ValidationResult result = new ValidationResult();
        Set<ConstraintViolation<T>> set = validator.validateProperty(obj, propertyName, Default.class);
        if (set != null && set.size() != 0) {
            result.setHasErrors(true);
            Map<String, String> errorMsg = new HashMap<String, String>();
            for (ConstraintViolation<T> cv : set) {
                errorMsg.put(propertyName, cv.getMessage());
            }
            result.setErrorMsg(errorMsg);
        }
        return result;
    }
}

校驗工具類返回的數據ValidationResult(省略getset)

package com.aliyun.prophet.facade.partner.flaw;

import java.util.Map;

/**
 * 校驗結果
 * 
 * @author lizhilong
 */
public class ValidationResult {

    // 校驗結果是否有錯
    private boolean             hasErrors;

    // 校驗錯誤信息
    private Map<String, String> errorMsg;
}


Person類(省略getset):

package com.aliyun.prophet.facade.partner.flaw;

import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.NotEmpty;
import org.hibernate.validator.constraints.Range;

public class Person {
    @Length(max=20,message="姓名長度不能大於20")
    @NotEmpty(message="姓名不能爲空")
    private String name;
    @Range(min = 0, max = 1, message = "性別只能輸入只能輸入0或1")
    private Integer gender;
    private Integer age;
}


使用方法:

/**
 * 
 * @author: lizhilong
 */
public class Test {
    @org.junit.Test
    public void testValidation(){
        Person person = new Person();
        person.setAge(12);
        person.setGender(2);
//       person.setName("李智龍");
        ValidationResult result = ValidationUtils.validateEntity(person);
        Map<String, String> map = result.getErrorMsg();
        boolean isError = result.isHasErrors();
        System.out.println("isError: " +isError);
        System.out.println(map);
    }
}
打印結果:

isError: true
{gender=性別只能輸入只能輸入0或1, name=姓名不能爲空}

是不是很簡單呀,幾步搞定,根本不用spring便可封裝一個好用的工具類







發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章