栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

自定义枚举拦截工具

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

自定义枚举拦截工具

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[] 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;
	}
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/685849.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号