User Tools

Site Tools


java-example:validationutil

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
java-example:validationutil [2021/12/20 09:32] morgan0329java-example:validationutil [2021/12/20 09:33] (current) – [ValidationF] morgan0329
Line 1: Line 1:
 +====== BeanUtil ======
 +<code java>
 +  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;
 +  }
 +</code>
 +
 +====== ServiceConfig ======
 +<code java>
 +  //环绕通知
 +  @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;
 +  }
 +</code>
 +
 +====== ValidationF ======
 +<code java>
 +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();
 +}
 +</code>
 +
 +====== ValidationUtil ======
 +<code java>
 +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;
 +  }
 +}
 +</code>
  

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