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 ...
 
随机推荐
- 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·的静态函数加载 ...