我从以下方面着手处理所有REST控制器:

@Pointcut(value="execution(* com.company.app.features.*.controller.*.*(..))")
public void controller() { }

@Before("controller()")
public void before(JoinPoint jp) {
    // Log
}


可以根据需要在@Pointcut中定义的包中的所有方法上正常工作。

但是,当我尝试将@Before指向仅用@GetMapping(..)注释的方法时,URL会导致404错误,但是其他错误通常会起作用。

我做错了什么?我的尝试都没有奏效:


仅在@Before之前修改:@Before("method() && @annotation(GetMapping)")
仅修改@Pointcut:@Pointcut(value="execution(@GetMapping com.company...
仅修改@Pointcut:@Pointcut(value="execution(@GetMapping * com.company...




同样的结果(错误404)是当我在控制器类上实现接口时,@Override@GetMapping注释的方法,并将该方法从接口放置到@Pointcut上,如第一段代码所述。我建议后面有类似的事情。有人可以解释一下吗?

最佳答案

@Pointcut(value="execution(* com.company.app.features.*.controller.*.*(..))")
public void controller() { }

@Pointcut(value="execution(@within(org.springframework......GetMapping)")
public void getMapping() { }


@Before("controller() && getMapping(object)")
public void controllerGetMapping(Object objectIfYouNeedIt) {
    // Log
}

09-07 00:07