3

Before spring introduce @GetMapping, there only one annotation we care about @RequestMapping, so, this aspect works

@Before("within(aa.bb.*.rest..*) && execution(public * *(..)) && @within(org.springframework.web.bind.annotation.RestController) && @annotation(org.springframework.web.bind.annotation.RequestMapping)")

But after we can use @GetMapping, @PostMapping, this point not works, but these annotations have a meta annotation @RequestMapping.

Is there any way to easily intercept all @RequestMapping/@{Get,Post,Put,Patch,..}Mapping ?

wener
  • 7,191
  • 6
  • 54
  • 78

1 Answers1

9

I found this syntax here works for me!

@Pointcut("execution(@(@org.springframework.web.bind.annotation.RequestMapping *) * *(..))")
public void requestMappingAnnotations() { }

Also I can list them all

@Pointcut("within(aa.bb.*.rest..*)  && @within(org.springframework.web.bind.annotation.RestController)")
public void restControllers() {}

@Pointcut("@annotation(org.springframework.web.bind.annotation.RequestMapping) " +
    "|| @annotation(org.springframework.web.bind.annotation.GetMapping)" +
    "|| @annotation(org.springframework.web.bind.annotation.PostMapping)" +
    "|| @annotation(org.springframework.web.bind.annotation.PatchMapping)" +
    "|| @annotation(org.springframework.web.bind.annotation.PutMapping)" +
    "|| @annotation(org.springframework.web.bind.annotation.DeleteMapping)"
)
public void mappingAnnotations() {}

@Pointcut("execution(@(@org.springframework.web.bind.annotation.RequestMapping *) * *(..))")
public void requestMappingAnnotations() { }

@Before("restControllers() && requestMappingAnnotations()")
public void onExecute(JoinPoint jp) {}
74smoky
  • 43
  • 1
  • 7
wener
  • 7,191
  • 6
  • 54
  • 78