java-example:validationutil
Table of Contents
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