Как получить URI запроса, метод запроса в рекомендации Spring AOP от контроллера? - PullRequest
0 голосов
/ 06 мая 2020

Контроллер:

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

Аспект:

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

Как получить URI запроса -> ("api / postmethod") в рекомендации по аспектам?

1 Ответ

0 голосов
/ 06 мая 2020

Следующий код получит значение 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();
}

Объяснение:

Выражение Pointcut @Around("@annotation(postMapping) && within(com.aop.example.web.controller..*)") можно объяснить следующим образом

  • метод, помеченный @PostMapping и
  • в любом классе в пакете root com.aop.example.web.controller

Для сопоставления сообщений, например @PostMapping(path = "api/postmethod"), код аспекта должен быть изменен, чтобы получить postMapping.path()

Ссылку на документацию для «Передачи параметров в совет» можно прочитать здесь

Обновление:

Также обратите внимание, что объем следующего pointcut выражение является глобальным. Это может дать совет или нацелить вызов любого метода в приложении и обычно приводит к нежелательным результатам.

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

Рекомендуется, чтобы область действия выражения pointcut была нацелена только на то, что требуется для оптимальных результатов.

...