package com.jjfinder.retail.admin.aspect; import java.lang.annotation.Annotation; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.lang.reflect.Parameter; import java.util.Arrays; import java.util.Objects; import org.apache.commons.lang3.StringUtils; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.reflect.MethodSignature; import org.springframework.core.annotation.Order; import org.springframework.stereotype.Component; import org.springframework.validation.annotation.Validated; import com.jjfinder.retail.common.annotation.Trim; import com.jjfinder.retail.common.model.baseModel; @Component @Aspect @Order(4) public class ParamFilterAspect { public static final String SET = "set"; public static final String GET = "get"; @Around("execution(* com.jjfinder.retail.admin.*.controller..*(..))") public Object paramFilter(ProceedingJoinPoint jp) throws Throwable { Object[] args = jp.getArgs(); for (Object obj : args) { if (baseModel.class.isAssignableFrom(obj.getClass())) { Field[] fields = obj.getClass().getDeclaredFields(); for (Field field : fields) { Annotation[] annotations = field.getAnnotations(); for (Annotation annotation : annotations) { if (Trim.class.isAssignableFrom(annotation.getClass())) { if (isNeedFilter(jp, annotation)) { Method setMethod = obj.getClass().getMethod(getFieldSetMethod(field.getName()), String.class); Method getMethod = obj.getClass().getMethod(getFieldGetMethod(field.getName())); String value = (String)getMethod.invoke(obj); setMethod.invoke(obj, value.trim()); } } } } } } Object result = jp.proceed(args); return result; } public static Boolean isNeedFilter(ProceedingJoinPoint jp, Annotation annotation) { Class validClass = null; MethodSignature signature = (MethodSignature) jp.getSignature(); Method method = signature.getMethod(); Parameter[] parameters = method.getParameters(); for (Parameter parameter : parameters) { if (parameter.isAnnotationPresent(Validated.class)) { Validated validate = parameter.getAnnotation(Validated.class); validClass = validate.value()[0]; Trim fieldAnnotation = (Trim) annotation; Class>[] groupClass = fieldAnnotation.groups(); if (Objects.isNull(validClass) && (Objects.isNull(groupClass) || groupClass.length == 0)) return true; return Arrays.asList(groupClass).contains(validClass); } } return false; } public static String getFieldSetMethod(String field) { return SET + StringUtils.capitalize(field); } public static String getFieldGetMethod(String field) { return GET + StringUtils.capitalize(field); } }
@documented @Constraint(validatedBy = TrimValidator.class) @Target({FIELD}) @Retention(RUNTIME) @ReportAsSingleViolation @NotNull public @interface Trim { String message() default "{org.hibernate.validator.constraints.NotBlank.message}"; Class>[] groups() default {}; Class extends Payload>[] payload() default {}; }
public class TrimValidator implements ConstraintValidator{ @Override public void initialize(Trim annotation) { } @Override public boolean isValid(CharSequence charSequence, ConstraintValidatorContext constraintValidatorContext) { if (charSequence == null) { return true; } return charSequence.toString().trim().length() > 0; } }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)