User Tools

Site Tools


java-example:validationutil

BeanUtil

  public static <T> BaseResp<T> validate(T obj) {
    BaseResp<T> baseVO;
    try {
      baseVO = new ValidationUtil<>(obj).validate();
    } catch (IllegalAccessException ex) {
      throw new InternalError("Unexpected IllegalAccessException: " + ex.getMessage());
    }
    return baseVO;
  }

ServiceConfig

  //环绕通知
  @Around("executeService()")
  public Object doAround(ProceedingJoinPoint joinPoint) {
    Object result;
    try {
      StringBuilder sb = new StringBuilder();
 
      Signature signature = joinPoint.getSignature();
      if (signature != null) {
        sb.append(signature.getDeclaringType() + " method=>" + signature.getName());
      }
 
      Object[] args = joinPoint.getArgs();
      //自动参数验证
      for (Object arg : args) {
        BaseResp resp = BeanUtil.validate(arg);
        if (resp != null) {
          logger.info(LOG_SERVICE_RESP, resp);
          return resp;
        }
      }
      //有返回参数 则需返回值
      result = joinPoint.proceed();
 
    } catch (Throwable t) {
    }
 
    return result;
  }

ValidationF

package com.xiaosq.common
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
 
/**
 * @author Morgan.L
 * @version 1.0
 * @date 4/9/2020 4:15 PM
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface ValidationF {
 
  enum Type {PhoneNo, NotNull, BankCardNo, NotBlank, IdCardNo}
 
  Type type();
 
  String[] msgParam();
}

ValidationUtil

package com.xiaosq.common;
 
import com.xiaosq.common.BaseResp;
import com.xiaosq.common.CodeMsgEnum;
import org.apache.commons.lang3.StringUtils;
 
import java.lang.annotation.Annotation;
import java.lang.reflect.AccessibleObject;
import java.lang.reflect.Field;
 
/**
 * @author Morgan.L
 * @version 1.0
 * @date 4/9/2020 4:13 PM
 * <p>
 * 对于前端web层验证:把所有参数验证完了,再返回验证信息。
 * 对于Service层验证:发现一个错误立刻停止验证,并返回错误信息。
 */
public class ValidationUtil<T> {
 
  private final T object;
 
  public ValidationUtil(T object) {
    this.object = object;
  }
 
  public T getObject() {
    return object;
  }
 
  public BaseResp<T> validate() throws IllegalAccessException {
 
    if (this.getObject() == null) {
      return null;
    }
 
    Class<?> clazz = this.getObject().getClass();
    // 获取实体类的所有属性,返回Field数组
    Field[] fields = clazz.getDeclaredFields();
    AccessibleObject.setAccessible(fields, true);
    for (Field field : fields) {
      for (Annotation annotation : field.getDeclaredAnnotations()) {
        if (annotation instanceof ValidationF) {
          ValidationF validation = (ValidationF) annotation;
 
          if (ValidationF.Type.NotBlank.equals(validation.type())) {
 
            if (field.get(object) == null || StringUtils.isBlank(field.get(object) + "")) {
              return BeanUtil.createResp(CodeMsgEnum.PARAM_IS_BLANK, validation.msgParam());
            }
 
          } else if (ValidationF.Type.BankCardNo.equals(validation.type())) {
 
            if (field.get(object) == null || StringUtils.isBlank((String) field.get(object))) {
              return BeanUtil.createResp(CodeMsgEnum.PARAM_IS_BLANK, validation.msgParam());
            } else {
              String fieldValue = (String) field.get(object);
              if (fieldValue.length() < 16 || fieldValue.length() > 19) {
                return BeanUtil.createResp(CodeMsgEnum.INVALID_BANK_CARD_NO, validation.msgParam());
              }
            }
 
          } else if (ValidationF.Type.PhoneNo.equals(validation.type())) {
            if (field.get(object) == null || StringUtils.isBlank((String) field.get(object))) {
              return BeanUtil.createResp(CodeMsgEnum.PARAM_IS_BLANK, validation.msgParam());
            } else {
              String fieldValue = ((String) field.get(object));
              if (fieldValue.length() != 11 || !fieldValue.startsWith("1") || !fieldValue.matches("[0-9]+")) {
                return BeanUtil.createResp(CodeMsgEnum.INVALID_PHONE_NO, validation.msgParam());
              }
            }
          } else if (ValidationF.Type.IdCardNo.equals(validation.type())) {
            if (field.get(object) == null || StringUtils.isBlank((String) field.get(object))) {
              return BeanUtil.createResp(CodeMsgEnum.PARAM_IS_BLANK, validation.msgParam());
            } else {
              String fieldValue = (String) field.get(object);
              if (fieldValue.length() > 18) {
                return BeanUtil.createResp(CodeMsgEnum.INVALID_ID_CARD_NO, validation.msgParam());
              }
            }
          } else if (ValidationF.Type.NotNull.equals(validation.type())) {
            if (field.get(object) == null) {
              return BeanUtil.createResp(CodeMsgEnum.PARAM_IS_NULL, validation.msgParam());
            }
          }
        }
      }
    }
    return null;
  }
}
java-example/validationutil.txt · Last modified: 2021/12/20 09:33 by morgan0329

Except where otherwise noted, content on this wiki is licensed under the following license: 沪ICP备12046235号-2
Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki