Spring AOP 自定义注解获取http接口及WebService接口入参和出参
Posted 火凤凰
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring AOP 自定义注解获取http接口及WebService接口入参和出参相关的知识,希望对你有一定的参考价值。
注解方法实现过程中可以采用如下获取方式:—以下为例
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes())
.getRequest();
1.定义两个方法注解,分别标记要处理的http接口及Webservice接口:
http接口注解
1
2
3
4
5
|
@Retention (RetentionPolicy.RUNTIME) @Target ({ ElementType.TYPE, ElementType.METHOD }) public @interface AnnotationForIntfMark { String value(); } |
WebService接口注解
1
2
3
4
5
|
@Retention (RetentionPolicy.RUNTIME) @Target ({ ElementType.TYPE, ElementType.METHOD }) public @interface AnnotationForWsMark { String value(); } |
2.定义Spring AOP切入点,两种接口注解切入点,注意 中间用||,网上也有说明使用or,试过之后发现or后面的切入点无效
1
2
3
|
@Pointcut ( "@annotation(ms.platform.base.interfaces.AnnotationForIntfMark) || @annotation(ms.platform.base.interfaces.AnnotationForWsMark)" ) public void pointcut() { } |
3.环绕式加入切入点
1
2
3
4
5
6
7
8
9
10
|
@Around ( "pointcut()" ) public void handle(ProceedingJoinPoint joinPoint) throws Throwable { StringBuffer sb = new StringBuffer(); String reqParam = preHandle(joinPoint); sb.append( "Input Param:【" ).append(reqParam).append( "】" ).append( "\n" ); Object retVal = joinPoint.proceed(); String respParam = postHandle(retVal); sb.append( "Output Param:【" ).append(respParam).append( "】" ).append( "\n" ); MSLog.error(sb.toString()); } |
4.preHandle(joinPoint)获取接口入参,postHandle(retVal)获取接口出参
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
private String preHandle(ProceedingJoinPoint joinPoint) { HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()) .getRequest(); Signature signature = joinPoint.getSignature(); MethodSignature methodSignature = (MethodSignature) signature; Method targetMethod = methodSignature.getMethod(); Annotation[] annotations = targetMethod.getAnnotations(); boolean isIntf = false ; StringBuffer sb = new StringBuffer(); for ( int i = 0 ; i < annotations.length; i++) { if (annotations[i].annotationType().equals(AnnotationForIntfMark. class )) { sb.append(request.getAttribute( "jsonContent" )); isIntf = true ; break ; } } if (!isIntf) { Object[] args = joinPoint.getArgs(); for ( int j = 0 ; j < args.length; j++) { sb.append(JsonUtil.bean2json(args[j])); } } return sb.toString(); } |
1
2
3
|
private String postHandle(Object retVal) { return JsonUtil.bean2json(retVal); } |
1
|
|
5.切面类定义,注意需要添加@Component,否则将扫描不到切面类
1
2
3
4
5
|
@Aspect @Component public class WebRequestAroundAdvice { } |
以上是关于Spring AOP 自定义注解获取http接口及WebService接口入参和出参的主要内容,如果未能解决你的问题,请参考以下文章
SpringBoot Starter自定义注解 - 接口加解密