@Aspect
@Component
public class ParamSignResolver {
public final Logger logger = LoggerFactory.getLogger(getClass());
public static final Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
@Around("@annotation(com.wanli.databoard.annonation.ParamSignAnnotation)&&@annotation(paramSignAnnotation)")
public Object doResolver(ProceedingJoinPoint proceedingJoinPoint, ParamSignAnnotation paramSignAnnotation) throws Throwable {
BaseReqVo baseRequestVo = null;
String targetMethod = "";
try {
targetMethod = proceedingJoinPoint.getTarget().getClass().getSimpleName() + "." + proceedingJoinPoint.getSignature().getName();
Object[] args = proceedingJoinPoint.getArgs();
baseRequestVo = (BaseReqVo) args[0];
logger.info("执行的目标方法:{}| 方法名:{}| 请求参数: {}", targetMethod, paramSignAnnotation.interfaceType().getDesc(), baseRequestVo.toString());
String errorMessage = validateParam(paramSignAnnotation.validateGroup(), baseRequestVo);
if (errorMessage != null) {
throw new SysException(ExceptionEnum.E10000, errorMessage);
}
// requestVo赋给aop 传入下个方法
args[0] = baseRequestVo;
return proceedingJoinPoint.proceed(args);
} catch (SysException be) {
logger.error("业务异常:{} | 执行的目标方法:{} | 业务错误信息:{} | 请求参数:{}", be.getClass().getSimpleName(), targetMethod, be.toString(), baseRequestVo == null ? "" : baseRequestVo.toString());
throw be;
} catch (Throwable e) {
logger.error("系统异常:{} | 执行的目标方法:{} | 请求参数:{} | 异常堆栈如下", e.getClass().getSimpleName(), targetMethod, baseRequestVo == null ? "" : baseRequestVo.toString(), e);
throw e;
}
}
/**
* 参数校验
*
* @param validateGroup
* @param baseRequestVo
* @return
*/
private String validateParam(Class<?>[] validateGroup, BaseReqVo baseRequestVo) {
SmartValidator smartValidator = new SpringValidatorAdapter(validator);
BindingResult bindingResult = new BindException(baseRequestVo.getClass(), baseRequestVo.getClass().getName());
smartValidator.validate(baseRequestVo, bindingResult, validateGroup);
if (bindingResult.hasErrors()) {
String errorMsg = fieldError2String(bindingResult.getFieldError());
logger.error("参数校验未通过 | 错误信息:{} | 请求参数:{} ", errorMsg, baseRequestVo.toString());
return errorMsg;
}
return null;
}
/**
* 字段错误转字符串
*
* @param fieldError Field Error
* @return
*/
public static String fieldError2String(FieldError fieldError) {
return String.format("%s:%s", fieldError.getField(), fieldError.getDefaultMessage());
}
}
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface ParamSignAnnotation {
//EnumInterfaceType interfaceType();
Class<?>[] validateGroup() default {Default.class};
boolean sign() default true;
}
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.2.4.Final</version>
</dependency>