package com.ks.app.aspect; import com.beust.jcommander.internal.Lists; import com.google.gson.Gson; import com.ks.lib.common.exception.ParamsException; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.Before; import org.aspectj.lang.annotation.Pointcut; import org.aspectj.lang.reflect.MethodSignature; import org.hibernate.validator.messageinterpolation.ResourceBundleMessageInterpolator; import org.hibernate.validator.resourceloading.PlatformResourceBundleLocator; import javax.validation.ConstraintViolation; import javax.validation.Validation; import javax.validation.Validator; import java.util.List; import java.util.Set; /** * 参数检查AOP */ public class AppParamsCheckAspect { private static Validator validator; static { validator = Validation.byDefaultProvider().configure() .messageInterpolator(new ResourceBundleMessageInterpolator( new PlatformResourceBundleLocator("validationMessages"))) //手动指定校验提示资源(默认在resource目录下ValidationMessages.properties) .buildValidatorFactory().getValidator(); } @Pointcut("@annotation(org.springframework.validation.annotation.Validated))") private void validateMethod() { } @Before("validateMethod()") public void before(JoinPoint joinPoint) throws ParamsException { Object[] args = joinPoint.getArgs(); MethodSignature signature = (MethodSignature) joinPoint.getSignature(); // 执行方法参数的校验 Set> constraintViolations = validator.forExecutables().validateParameters(joinPoint.getThis(), signature.getMethod(), args); List messages = Lists.newArrayList(); for (ConstraintViolation error : constraintViolations) { messages.add(error.getMessage()); } if (!messages.isEmpty()) { throw new ParamsException(ParamsException.CODE_PARAMS_NOT_ENOUGH, new Gson().toJson(messages)); } } }