您的位置:首页 > 编程语言 > Java开发

javax.validation使用最佳实践

2017-12-04 11:57 344 查看
之前讲过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便可封装一个好用的工具类
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息