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@Componentpublic class WebRequestAroundAdvice {} |
Spring AOP 自定义注解获取http接口及WebService接口入参和出参的更多相关文章
- 利用Spring AOP自定义注解解决日志和签名校验
转载:http://www.cnblogs.com/shipengzhi/articles/2716004.html 一.需解决的问题 部分API有签名参数(signature),Passport首先 ...
- spring AOP自定义注解方式实现日志管理
今天继续实现AOP,到这里我个人认为是最灵活,可扩展的方式了,就拿日志管理来说,用Spring AOP 自定义注解形式实现日志管理.废话不多说,直接开始!!! 关于配置我还是的再说一遍. 在appli ...
- spring AOP自定义注解 实现日志管理
今天继续实现AOP,到这里我个人认为是最灵活,可扩展的方式了,就拿日志管理来说,用Spring AOP 自定义注解形式实现日志管理.废话不多说,直接开始!!! 关于配置我还是的再说一遍. 在appli ...
- (转)利用Spring AOP自定义注解解决日志和签名校验
一.需解决的问题 部分API有签名参数(signature),Passport首先对签名进行校验,校验通过才会执行实现方法. 第一种实现方式(Origin):在需要签名校验的接口里写校验的代码,例如: ...
- Spring aop+自定义注解统一记录用户行为日志
写在前面 本文不涉及过多的Spring aop基本概念以及基本用法介绍,以实际场景使用为主. 场景 我们通常有这样一个需求:打印后台接口请求的具体参数,打印接口请求的最终响应结果,以及记录哪个用户在什 ...
- 使用Spring Aop自定义注解实现自动记录日志
百度加自己琢磨,以下亲测有效,所以写下来记录,也方便自己回顾浏览加深印象之类,有什么问题可以评论一起解决,不完整之处也请大佬指正,一起进步哈哈(1)首先配置文件: <!-- 声明自动为sprin ...
- Spring AOP 自定义注解实现统一日志管理
一.AOP的基本概念: AOP,面向切面编程,常用于日志,事务,权限等业务处理.AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容(Spring核心之一),是函数式编程 ...
- redis分布式锁-spring boot aop+自定义注解实现分布式锁
接这这一篇redis分布式锁-java实现末尾,实现aop+自定义注解 实现分布式锁 1.为什么需要 声明式的分布式锁 编程式分布式锁每次实现都要单独实现,但业务量大功能复杂时,使用编程式分布式锁无疑 ...
- 使用AOP+自定义注解完成spring boot的接口权限校验
记使用AOP+自定义注解完成接口的权限校验,代码如下: pom文件添加所需依赖: 1 <dependency> 2 <groupId>org.aspectj</group ...
随机推荐
- Jython:java调用python文件之第三方包路径问题
本文转载自:http://blog.csdn.net/ztf312/article/details/51338060 本方法解决python代码的可移植性,不需要在新机器上配置python环境,只通过 ...
- 【ZZ】浅谈大型web系统架构 | 菜鸟教程
浅谈大型web系统架构 http://www.runoob.com/w3cnote/large-scale-web-system-architecture.html
- Spring MVC、MyBatis整合文件配置详解
Spring:http://spring.io/docs MyBatis:http://mybatis.github.io/mybatis-3/ Building a RESTful Web Serv ...
- [saiku] 通过管理台配置用户、schema和数据源
上一篇讲到了如何下载和安装saiku [http://www.cnblogs.com/avivaye/p/4877680.html] 本文简介下saiku用户的配置操作和需要注意的点 一.添加用户 S ...
- Docker系列06:Linux修改docker镜像和容器数据存储位置
指定镜像和容器存放路径的参数是--graph=/var/lib/docker,其默认存储位置为/var/lib/docker, Docker 的配置文件可以设置大部分的后台进程参数,在各个操作系统中的 ...
- Shell脚本的调试方法
Shell脚本的调试方法 Shell提供了一些用于调试脚本的选项,如下所示: -n 读一遍脚本中的命令但不执行,用于检查脚本中的语法错误 -v 一边执行脚本,一边将执行过的脚本命令打印到标 ...
- ASPxGridView删除、添加、修改成功后,弹出提示对话框的方法
分为几步: 1.在aspx文件中添加 function EndCallBack(s, e) { if (s.cpAlertMsg != "" && s.cpA ...
- 「小程序JAVA实战」小程序数据缓存API(54)
转自:https://idig8.com/2018/09/22/xiaochengxujavashizhanxiaochengxushujuhuancunapi52/ 刚开始写小程序的时候,用户信息我 ...
- Gerrit 系统初探 (已转移到 https://steemit.com/gerrit/@linvictor88/gerrit )
Gerrit 使用简介 Gerrit,一种免费.开放源代码的代码审查软件,使用网页界面.利用网页浏览器,同一个团队的软件程序员,可以相互审阅彼此修改后的程序代码,决定是否能够提交,退回或 ...
- Grapher - Change how graphs look
[Change how graphs look] Pan and zoom the graph 工具条如下: Change the type of graph 开场的Graph Template在Me ...