validationチェック----要求beanの必須パラメータをチェックするために使用できます
4118 ワード
validationのもう一つの使い方です.この使い方は、ツールクラスを簡単に検証するのに便利です.
検証ツールクラスから返されるデータValidationResult(getsetを省略):
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 ValidationResult validateEntity(T obj) {
ValidationResult result = new ValidationResult();
Set> set = validator.validate(obj, Default.class);
// if( CollectionUtils.isNotEmpty(set) ){
if (set != null && set.size() != 0) {
result.setHasErrors(true);
Map errorMsg = new HashMap();
for (ConstraintViolation cv : set) {
errorMsg.put(cv.getPropertyPath().toString(), cv.getMessage());
}
result.setErrorMsg(errorMsg);
}
return result;
}
public static ValidationResult validateProperty(T obj, String propertyName) {
ValidationResult result = new ValidationResult();
Set> set = validator.validateProperty(obj, propertyName, Default.class);
if (set != null && set.size() != 0) {
result.setHasErrors(true);
Map errorMsg = new HashMap();
for (ConstraintViolation cv : set) {
errorMsg.put(propertyName, cv.getMessage());
}
result.setErrorMsg(errorMsg);
}
return result;
}
}
検証ツールクラスから返されるデータValidationResult(getsetを省略):
package com.aliyun.prophet.facade.partner.flaw;
Personクラス(getset省略):import java.util.Map; /** * * * @author lizhilong */ public class ValidationResult { // private boolean hasErrors; // private Map<String, String> errorMsg; }
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
map = result.getErrorMsg(); boolean isError = result.isHasErrors(); System.out.println("isError: " +isError); System.out.println(map); } } isError: true {gender= 0 1, name= }
ValidationResultの検証結果については、さらにパッケージ化することもできます./** * ValidationResult * * @param request */ private String validateParam(S request) { StringBuilder sbd = new StringBuilder(); ValidationResult result = ValidationUtil.validateEntity(request); if (result.isHasErrors()) { result.getErrorMsg().forEach((k, v) -> { sbd.append(v).append("&"); }); } return sbd.deleteCharAt(sbd.length() - 1).toString(); }
validationはspringの使い方と結びつけて、注釈の意味を含んで、リンクアドレス:javax.validationはspringのベストプラクティスと結びつけて、