|
|
|
@ -17,10 +17,12 @@ package org.opsli.core.utils;
|
|
|
|
|
|
|
|
|
|
import cn.hutool.core.convert.Convert;
|
|
|
|
|
import cn.hutool.core.lang.Validator;
|
|
|
|
|
import cn.hutool.core.util.NumberUtil;
|
|
|
|
|
import cn.hutool.core.util.ReflectUtil;
|
|
|
|
|
import io.swagger.annotations.ApiModelProperty;
|
|
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
|
|
import org.opsli.common.utils.DefPatternPool;
|
|
|
|
|
import org.opsli.core.msg.ValidationMsg;
|
|
|
|
|
import org.opsli.api.wrapper.system.dict.DictModel;
|
|
|
|
|
import org.opsli.common.annotation.validation.ValidationArgs;
|
|
|
|
@ -97,220 +99,294 @@ public final class ValidationUtil {
|
|
|
|
|
// 循环验证
|
|
|
|
|
for (ValiArgsType type : types) {
|
|
|
|
|
try {
|
|
|
|
|
boolean validateRet;
|
|
|
|
|
switch (type) {
|
|
|
|
|
// 不能为空
|
|
|
|
|
case IS_NOT_NULL:
|
|
|
|
|
boolean notNull = Validator.isNotEmpty(fieldValue);
|
|
|
|
|
if(!notNull){
|
|
|
|
|
case IS_NOT_NULL: {
|
|
|
|
|
validateRet = Validator.isNotEmpty(fieldValue);
|
|
|
|
|
if (!validateRet) {
|
|
|
|
|
ValidationMsg msg = ValidationMsg.EXCEPTION_IS_NOT_NULL;
|
|
|
|
|
msg.setFieldName(fieldName);
|
|
|
|
|
throw new ServiceException(msg);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
// 字母,数字和下划线
|
|
|
|
|
case IS_GENERAL:
|
|
|
|
|
if(StringUtils.isEmpty(value)) {
|
|
|
|
|
case IS_GENERAL: {
|
|
|
|
|
if (StringUtils.isEmpty(value)) {
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
boolean general = Validator.isGeneral(value);
|
|
|
|
|
if(!general){
|
|
|
|
|
validateRet = Validator.isGeneral(value);
|
|
|
|
|
if (!validateRet) {
|
|
|
|
|
ValidationMsg msg = ValidationMsg.EXCEPTION_IS_GENERAL;
|
|
|
|
|
msg.setFieldName(fieldName);
|
|
|
|
|
throw new ServiceException(msg);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
// 数字
|
|
|
|
|
case IS_NUMBER:
|
|
|
|
|
if(StringUtils.isEmpty(value)){
|
|
|
|
|
}
|
|
|
|
|
// 整数
|
|
|
|
|
case IS_INTEGER: {
|
|
|
|
|
if (StringUtils.isEmpty(value)) {
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
boolean number = Validator.isNumber(value);
|
|
|
|
|
if(!number){
|
|
|
|
|
ValidationMsg msg = ValidationMsg.EXCEPTION_IS_NUMBER;
|
|
|
|
|
validateRet = NumberUtil.isInteger(value);
|
|
|
|
|
if (!validateRet) {
|
|
|
|
|
ValidationMsg msg = ValidationMsg.EXCEPTION_IS_INTEGER;
|
|
|
|
|
msg.setFieldName(fieldName);
|
|
|
|
|
throw new ServiceException(msg);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
// 小数浮点
|
|
|
|
|
case IS_DECIMAL:
|
|
|
|
|
if(StringUtils.isEmpty(value)){
|
|
|
|
|
}
|
|
|
|
|
// 浮点数
|
|
|
|
|
case IS_DECIMAL: {
|
|
|
|
|
if (StringUtils.isEmpty(value)) {
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
boolean decimal = Validator.isMoney(value);
|
|
|
|
|
if(!decimal){
|
|
|
|
|
validateRet = NumberUtil.isDouble(value);
|
|
|
|
|
if (!validateRet) {
|
|
|
|
|
ValidationMsg msg = ValidationMsg.EXCEPTION_IS_DECIMAL;
|
|
|
|
|
msg.setFieldName(fieldName);
|
|
|
|
|
throw new ServiceException(msg);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
// 质数
|
|
|
|
|
case IS_PRIMES: {
|
|
|
|
|
if (StringUtils.isEmpty(value)) {
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
// 先验证 是否是 整数, 再验证是否是 质数
|
|
|
|
|
validateRet = NumberUtil.isInteger(value) &&
|
|
|
|
|
NumberUtil.isPrimes(Convert.toInt(value));
|
|
|
|
|
if (!validateRet) {
|
|
|
|
|
ValidationMsg msg = ValidationMsg.EXCEPTION_IS_PRIMES;
|
|
|
|
|
msg.setFieldName(fieldName);
|
|
|
|
|
throw new ServiceException(msg);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
// 纯字母
|
|
|
|
|
case IS_LETTER:
|
|
|
|
|
if(StringUtils.isEmpty(value)){
|
|
|
|
|
case IS_LETTER: {
|
|
|
|
|
if (StringUtils.isEmpty(value)) {
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
boolean letter = Validator.isLetter(value);
|
|
|
|
|
if(!letter){
|
|
|
|
|
validateRet = Validator.isLetter(value);
|
|
|
|
|
if (!validateRet) {
|
|
|
|
|
ValidationMsg msg = ValidationMsg.EXCEPTION_IS_LETTER;
|
|
|
|
|
msg.setFieldName(fieldName);
|
|
|
|
|
throw new ServiceException(msg);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
// 大写
|
|
|
|
|
case IS_UPPER_CASE:
|
|
|
|
|
if(StringUtils.isEmpty(value)){
|
|
|
|
|
case IS_UPPER_CASE: {
|
|
|
|
|
if (StringUtils.isEmpty(value)) {
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
boolean upperCase = Validator.isUpperCase(value);
|
|
|
|
|
if(!upperCase){
|
|
|
|
|
validateRet = Validator.isUpperCase(value);
|
|
|
|
|
if (!validateRet) {
|
|
|
|
|
ValidationMsg msg = ValidationMsg.EXCEPTION_IS_UPPER_CASE;
|
|
|
|
|
msg.setFieldName(fieldName);
|
|
|
|
|
throw new ServiceException(msg);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
// 小写
|
|
|
|
|
case IS_LOWER_CASE:
|
|
|
|
|
if(StringUtils.isEmpty(value)){
|
|
|
|
|
case IS_LOWER_CASE: {
|
|
|
|
|
if (StringUtils.isEmpty(value)) {
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
boolean lowerCase = Validator.isLowerCase(value);
|
|
|
|
|
if(!lowerCase){
|
|
|
|
|
validateRet = Validator.isLowerCase(value);
|
|
|
|
|
if (!validateRet) {
|
|
|
|
|
ValidationMsg msg = ValidationMsg.EXCEPTION_IS_LOWER_CASE;
|
|
|
|
|
msg.setFieldName(fieldName);
|
|
|
|
|
throw new ServiceException(msg);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
// IP
|
|
|
|
|
case IS_IP: {
|
|
|
|
|
if (StringUtils.isEmpty(value)) {
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
validateRet = Validator.isIpv4(value) || Validator.isIpv6(value) ;
|
|
|
|
|
if (!validateRet) {
|
|
|
|
|
ValidationMsg msg = ValidationMsg.EXCEPTION_IS_IP;
|
|
|
|
|
msg.setFieldName(fieldName);
|
|
|
|
|
throw new ServiceException(msg);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
// IPV4
|
|
|
|
|
case IS_IPV4:
|
|
|
|
|
if(StringUtils.isEmpty(value)){
|
|
|
|
|
case IS_IPV4: {
|
|
|
|
|
if (StringUtils.isEmpty(value)) {
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
boolean ipv4 = Validator.isIpv4(value);
|
|
|
|
|
if(!ipv4){
|
|
|
|
|
validateRet = Validator.isIpv4(value);
|
|
|
|
|
if (!validateRet) {
|
|
|
|
|
ValidationMsg msg = ValidationMsg.EXCEPTION_IS_IPV4;
|
|
|
|
|
msg.setFieldName(fieldName);
|
|
|
|
|
throw new ServiceException(msg);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
// 金额
|
|
|
|
|
case IS_MONEY:
|
|
|
|
|
}
|
|
|
|
|
// IPV6
|
|
|
|
|
case IS_IPV6: {
|
|
|
|
|
if(StringUtils.isEmpty(value)){
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
boolean money = Validator.isMoney(value);
|
|
|
|
|
if(!money){
|
|
|
|
|
validateRet = Validator.isIpv6(value);
|
|
|
|
|
if(!validateRet){
|
|
|
|
|
ValidationMsg msg = ValidationMsg.EXCEPTION_IS_IPV6;
|
|
|
|
|
msg.setFieldName(fieldName);
|
|
|
|
|
throw new ServiceException(msg);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
// 金额
|
|
|
|
|
case IS_MONEY: {
|
|
|
|
|
if (StringUtils.isEmpty(value)) {
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
validateRet = Validator.isMoney(value);
|
|
|
|
|
if (!validateRet) {
|
|
|
|
|
ValidationMsg msg = ValidationMsg.EXCEPTION_IS_MONEY;
|
|
|
|
|
msg.setFieldName(fieldName);
|
|
|
|
|
throw new ServiceException(msg);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
// 邮箱
|
|
|
|
|
case IS_EMAIL:
|
|
|
|
|
if(StringUtils.isEmpty(value)){
|
|
|
|
|
case IS_EMAIL: {
|
|
|
|
|
if (StringUtils.isEmpty(value)) {
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
boolean email = Validator.isEmail(value);
|
|
|
|
|
if(!email){
|
|
|
|
|
validateRet = Validator.isEmail(value);
|
|
|
|
|
if (!validateRet) {
|
|
|
|
|
ValidationMsg msg = ValidationMsg.EXCEPTION_IS_EMAIL;
|
|
|
|
|
msg.setFieldName(fieldName);
|
|
|
|
|
throw new ServiceException(msg);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
// 手机号
|
|
|
|
|
case IS_MOBILE:
|
|
|
|
|
if(StringUtils.isEmpty(value)){
|
|
|
|
|
case IS_MOBILE: {
|
|
|
|
|
if (StringUtils.isEmpty(value)) {
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
boolean mobile = Validator.isMobile(value);
|
|
|
|
|
if(!mobile){
|
|
|
|
|
validateRet = Validator.isMobile(value);
|
|
|
|
|
if (!validateRet) {
|
|
|
|
|
ValidationMsg msg = ValidationMsg.EXCEPTION_IS_MOBILE;
|
|
|
|
|
msg.setFieldName(fieldName);
|
|
|
|
|
throw new ServiceException(msg);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
// 18位身份证
|
|
|
|
|
case IS_CITIZENID:
|
|
|
|
|
if(StringUtils.isEmpty(value)){
|
|
|
|
|
case IS_CITIZENID: {
|
|
|
|
|
if (StringUtils.isEmpty(value)) {
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
boolean citizenId = Validator.isCitizenId(value);
|
|
|
|
|
if(!citizenId){
|
|
|
|
|
validateRet = Validator.isCitizenId(value);
|
|
|
|
|
if (!validateRet) {
|
|
|
|
|
ValidationMsg msg = ValidationMsg.EXCEPTION_IS_CITIZENID;
|
|
|
|
|
msg.setFieldName(fieldName);
|
|
|
|
|
throw new ServiceException(msg);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
// 邮编
|
|
|
|
|
case IS_ZIPCODE:
|
|
|
|
|
if(StringUtils.isEmpty(value)){
|
|
|
|
|
case IS_ZIPCODE: {
|
|
|
|
|
if (StringUtils.isEmpty(value)) {
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
boolean zipCode = Validator.isZipCode(value);
|
|
|
|
|
if(!zipCode){
|
|
|
|
|
validateRet = Validator.isZipCode(value);
|
|
|
|
|
if (!validateRet) {
|
|
|
|
|
ValidationMsg msg = ValidationMsg.EXCEPTION_IS_ZIPCODE;
|
|
|
|
|
msg.setFieldName(fieldName);
|
|
|
|
|
throw new ServiceException(msg);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
// URL
|
|
|
|
|
case IS_URL:
|
|
|
|
|
if(StringUtils.isEmpty(value)){
|
|
|
|
|
case IS_URL: {
|
|
|
|
|
if (StringUtils.isEmpty(value)) {
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
boolean url = Validator.isUrl(value);
|
|
|
|
|
if(!url){
|
|
|
|
|
validateRet = Validator.isUrl(value);
|
|
|
|
|
if (!validateRet) {
|
|
|
|
|
ValidationMsg msg = ValidationMsg.EXCEPTION_IS_URL;
|
|
|
|
|
msg.setFieldName(fieldName);
|
|
|
|
|
throw new ServiceException(msg);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
// 汉字
|
|
|
|
|
case IS_CHINESE:
|
|
|
|
|
if(StringUtils.isEmpty(value)){
|
|
|
|
|
case IS_CHINESE: {
|
|
|
|
|
if (StringUtils.isEmpty(value)) {
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
boolean chinese = Validator.isChinese(value);
|
|
|
|
|
if(!chinese){
|
|
|
|
|
validateRet = Validator.isChinese(value);
|
|
|
|
|
if (!validateRet) {
|
|
|
|
|
ValidationMsg msg = ValidationMsg.EXCEPTION_IS_CHINESE;
|
|
|
|
|
msg.setFieldName(fieldName);
|
|
|
|
|
throw new ServiceException(msg);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
// 汉字,字母,数字和下划线
|
|
|
|
|
case IS_GENERAL_WITH_CHINESE:
|
|
|
|
|
if(StringUtils.isEmpty(value)){
|
|
|
|
|
case IS_GENERAL_WITH_CHINESE: {
|
|
|
|
|
if (StringUtils.isEmpty(value)) {
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
boolean generalWithChinese = Validator.isGeneralWithChinese(value);
|
|
|
|
|
if(!generalWithChinese){
|
|
|
|
|
validateRet = Validator.isGeneralWithChinese(value);
|
|
|
|
|
if (!validateRet) {
|
|
|
|
|
ValidationMsg msg = ValidationMsg.EXCEPTION_IS_GENERAL_WITH_CHINESE;
|
|
|
|
|
msg.setFieldName(fieldName);
|
|
|
|
|
throw new ServiceException(msg);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
// MAC地址
|
|
|
|
|
case IS_MAC:
|
|
|
|
|
if(StringUtils.isEmpty(value)){
|
|
|
|
|
case IS_MAC: {
|
|
|
|
|
if (StringUtils.isEmpty(value)) {
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
boolean mac = Validator.isMac(value);
|
|
|
|
|
if(!mac){
|
|
|
|
|
validateRet = Validator.isMac(value);
|
|
|
|
|
if (!validateRet) {
|
|
|
|
|
ValidationMsg msg = ValidationMsg.EXCEPTION_IS_MAC;
|
|
|
|
|
msg.setFieldName(fieldName);
|
|
|
|
|
throw new ServiceException(msg);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
// 中国车牌
|
|
|
|
|
case IS_PLATE_NUMBER:
|
|
|
|
|
if(StringUtils.isEmpty(value)){
|
|
|
|
|
case IS_PLATE_NUMBER: {
|
|
|
|
|
if (StringUtils.isEmpty(value)) {
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
boolean plateNumber = Validator.isPlateNumber(value);
|
|
|
|
|
if(!plateNumber){
|
|
|
|
|
validateRet = Validator.isPlateNumber(value);
|
|
|
|
|
if (!validateRet) {
|
|
|
|
|
ValidationMsg msg = ValidationMsg.EXCEPTION_IS_PLATE_NUMBER;
|
|
|
|
|
msg.setFieldName(fieldName);
|
|
|
|
|
throw new ServiceException(msg);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
// 安全密码
|
|
|
|
|
case IS_SECURITY_PASSWORD: {
|
|
|
|
|
if (StringUtils.isEmpty(value)) {
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
validateRet = Validator.isMatchRegex(
|
|
|
|
|
DefPatternPool.SECURITY_PASSWORD, value);
|
|
|
|
|
if (!validateRet) {
|
|
|
|
|
ValidationMsg msg = ValidationMsg.EXCEPTION_IS_SECURITY_PASSWORD;
|
|
|
|
|
msg.setFieldName(fieldName);
|
|
|
|
|
throw new ServiceException(msg);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
default:
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|