主要的工具類代碼如下
public class ValidatorUtils {
private ValidatorUtils() {
}
/**
* 獲取默認的Validator
*
* @param
* @return
* @title 獲取默認的Validator
*
*/
public static Validator validator() {
return ValidatorFactory.INSTANCE.getValidator();
}
/**
* 驗證某個對象
*
* @param object
* @return
* @title 驗證某個對象
*
*/
public static ValidatorResult validate(Object object) {
Set<ConstraintViolation<Object>> constraintViolations = validator().validate(object);
if (constraintViolations.isEmpty()) {
return ValidatorResult.success();
}
Iterator<ConstraintViolation<Object>> iterator = constraintViolations.iterator();
// 用於存儲驗證後的錯誤信息
StringBuffer buffer = new StringBuffer(64);
while (iterator.hasNext()) {
buffer.append(iterator.next().getMessage() + " | ");
}
return ValidatorResult.fail(buffer.toString());
}
/**
* 獲取ValidatorFactory,保證單例
* <功能詳細描述》
* @title 獲取ValidatorFactory,保證單例
*
*/
private enum ValidatorFactory {
INSTANCE {
javax.validation.ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
@Override
public Validator getValidator() {
return factory.getValidator();
}
};
public abstract Validator getValidator();
}
/**
* 驗證結果
* <功能詳細描述>
*
*
*/
public static class ValidatorResult {
/**
* 是否成功
*/
private Boolean success;
/**
* 描述
*/
private String description;
public ValidatorResult(Boolean success, String description) {
this.success = success;
this.description = description;
}
public Boolean getSuccess() {
return success;
}
public void setSuccess(Boolean success) {
this.success = success;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public static ValidatorResult success() {
return new ValidatorResult(true, "驗證通過");
}
public static ValidatorResult fail(String description) {
return new ValidatorResult(false, description);
}
public Boolean failed() {
return getSuccess() == false;
}
}
}
使用方式:在serviceImpl層或者 controller層
ValidatorUtils.ValidatorResult validatorResult =ValidatorUtils.validate(request.getData());
if(validatorResult.failed()){
logger.warn("請求失敗:"+validatorResult.getDescription());
return result.fail(ResultCode.PARAM_ERROR.getCode(),validatorResult.getDescription());
}