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@interfaceAnnotationForIntfMark {    String value();} | 
WebService接口注解
| 1 2 3 4 5 | @Retention(RetentionPolicy.RUNTIME)@Target({ ElementType.TYPE, ElementType.METHOD })public@interfaceAnnotationForWsMark {    String value();} | 
2.定义Spring AOP切入点,两种接口注解切入点,注意 中间用||,网上也有说明使用or,试过之后发现or后面的切入点无效
| 1 2 3 | @Pointcut("@annotation(ms.platform.base.interfaces.AnnotationForIntfMark) || @annotation(ms.platform.base.interfaces.AnnotationForWsMark)")    publicvoidpointcut() {    } | 
3.环绕式加入切入点
| 1 2 3 4 5 6 7 8 9 10 | @Around("pointcut()")    publicvoidhandle(ProceedingJoinPoint joinPoint) throwsThrowable {        StringBuffer sb = newStringBuffer();        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 | privateString 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();        booleanisIntf = false;        StringBuffer sb = newStringBuffer();        for(inti = 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(intj = 0; j < args.length; j++) {                sb.append(JsonUtil.bean2json(args[j]));            }        }        returnsb.toString();    } | 
| 1 2 3 | privateString postHandle(Object retVal) {        returnJsonUtil.bean2json(retVal);    } | 
| 1 |  | 
5.切面类定义,注意需要添加@Component,否则将扫描不到切面类
| 1 2 3 4 5 | @Aspect@ComponentpublicclassWebRequestAroundAdvice {} | 
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 ... 
随机推荐
- Regenerate Script 重置脚本
			1.Regenerate Script 重置回录制后的第一次脚本,当修改设定后点击这个按钮,新的设置也会录制到 如:开始没有录到下载的文件,添加下载文件的个时候,再次点击重置,就录制到了 如:如开始是 ... 
- C++ 构造函数_拷贝构造函数
			拷贝构造函数 
- Bootstrap-Other:Less 教程
			ylbtech-Bootstrap-Other:Less 教程 1.返回顶部 1. 2. 2.返回顶部 3.返回顶部 4.返回顶部 5.返回顶部 1. http://www.runoob. ... 
- Oracle NVL与NVL2函数
			nvl( ) 函数 从两个表达式返回一个非 null 值. 语法 NVL(eExpression1, eExpression2) 参数 eExpression1, eExpression2 如果 eE ... 
- TMS Grid
			TMS Grid http://edn.embarcadero.com/article/42553 
- tomcat8 安全加固
			本文基于tomcat8.0.24 1.删除文档和示例程序 [操作目的]删除示例文档 [加固方法]删除webapps/docs.examples.manager.ROOT.host-manager [是 ... 
- 【322】python控制键盘鼠标:pynput
			参考:python实战===python控制键盘鼠标:pynput 参考:[Python Study Notes]pynput实现对鼠标控制 参考:pynput doc 参考:pynput Packa ... 
- 【C】常用的字符串函数
			1. strcpy 函数名:strcpy 用法:char *strcpy(char *destin, char *cource) 功能:将一个字符串从一个拷贝到另外一个 程序示例: #include ... 
- css常用属性总结:文本属性中的text-indent
			在网页中的文本格式中最重要的效果之一就是段落的首行文本缩进,尤其在新闻类页面,使用text-indent,任何元素都可以让首行以给定的长度缩进, 长度甚至可以是负数,这一属性的最常用方式就是段落的首行 ... 
- Qt Font
			Font and How to use TTF字体基本知识及其在QT中的应用 Qt为程序添加外部字体 在使用qt 添加第三方字体的时候,在程序开始的时候,使用·QFontDatabse·的静态函数加载 ... 
