首页 > 解决方案 > 如何从控制器获取 Spring AOP 建议中的请求 URI、请求方法?

问题描述

控制器:

@PostMapping("api/postmethod")
public Response getResponse(@RequestParam String name, @RequestBody Object obj...){
....
}

方面:

@After("execution(* *(..))")
public void after(JoinPoint joinPoint){
...
}

如何在 Aspect 建议中获取请求 uri -> ("api/postmethod")?

标签: aopspring-aop

解决方案


以下代码将获取 PostMapping 值

@Around("@annotation(postMapping) && within(com.aop.example.web.controller..*)")
public Object postMapping(ProceedingJoinPoint jp,PostMapping postMapping) throws Throwable {
    System.out.println(Arrays.asList(postMapping.value()));
    return jp.proceed();
}

解释 :

切入点表达式 @Around("@annotation(postMapping) && within(com.aop.example.web.controller..*)")可以解释如下

  • @PostMappingand注释的方法
  • 在根包内的任何类中com.aop.example.web.controller

对于后映射@PostMapping(path = "api/postmethod"),应修改方面代码以获取postMapping.path()

可以在此处阅读“将参数传递给建议”的文档参考

更新 :

另请注意,以下切入点表达式的范围是 global 。这可以建议/定位应用程序中的任何方法调用,并且通常会产生不希望的结果。

 @After("execution(* *(..))")

建议将切入点表达式的范围保持为仅针对最佳结果所需的范围。


推荐阅读