Spring 如何在Aop中打印grails控制器参数对象值

Spring 如何在Aop中打印grails控制器参数对象值,spring,grails,spring-aop,Spring,Grails,Spring Aop,我有一个控制器,参数对象由id、username、max和offset值组成 我试图访问Aop中的参数对象,但它只提供默认长度和类参数 我尝试以不同的方式访问,但无法访问参数值 控制器:: class UserController { def index() { params.max = Math.min(params.max ? params.int('max') : 5, 100) params.offset = params.offset ? par

我有一个控制器,参数对象由id、username、max和offset值组成

我试图访问Aop中的参数对象,但它只提供默认长度和类参数

我尝试以不同的方式访问,但无法访问参数值

控制器::

class UserController {
    def index() {
        params.max = Math.min(params.max ? params.int('max') : 5, 100)
        params.offset = params.offset ? params.offset.toInteger() : 0;
        User user = User.findById(params.id);
        ------
        -----
        ----
    }
}   
AOP代码::

@Aspect
class LogInterceptor {

private static final logger = LogFactory.getLog(this)

@Before("within(com.sample..*)")
public void logBefore(JoinPoint joinPoint) {

    String msg = String.format("logBefore : %s.%s(%s)",
            joinPoint.getTarget().getClass().getName(),
            joinPoint.getSignature().getName(),
            Arrays.toString(joinPoint.getArgs()));

    logger.info(msg);
}
}
如何访问值id、用户名和其他参数

以上代码的日志::

2014-11-13 16:28:10722[http-bio-8080-exec-5]INFO aop.LogInterceptor-logBefore:com.sample.controller.UserController.getMetaClass([])

2014-11-13 16:28:10722[http-bio-8080-exec-5]INFO aop.LogInterceptor-logBefore:com.sample.controller.UserController.getMetaClass([])

2014-11-13 16:28:10723[http-bio-8080-exec-5]INFO aop.LogInterceptor-logBefore:com.sample.controller.UserController.getProperty([params

2014-11-13 16:28:10724[http-bio-8080-exec-5]INFO aop.LogInterceptor-logBefore:com.sample.controller.UserController.index([])

2014-11-13 16:28:10727[http-bio-8080-exec-5]INFO aop.LogInterceptor-logBefore:com.sample.service.UserService.getMetaClass([])

在第三行中,我得到参数,但我需要它的内部值


提前感谢

在最简单的情况下,您可以从以下位置使用
控制器拦截器

但是,如果需要将同一拦截器应用于多个控制器,则可以使用拦截器继承基类,或者使用


我看不到您在哪里访问所需的
控制器的params
对象。我修改了问题并添加了日志。当我调用joinPoint.getArgs()时,它会给我params object如何填写
joinPoint.args
?joinPoint.args将给出该方法的输入参数,该参数由AOP填充。
params
不是控制器方法的参数,而是类字段。你应该重新考虑你的方法。你确定你要用老式的AOP吗?Grails提供了简单而干净的拦截方法这将只记录控制器,但我有一个场景,请求从控制器层到服务层再到帮助器方法,然后服务层和帮助器方法的日志将不起作用。。我想,你最初的问题只涉及控制器,为模棱两可而道歉。。实际上,我需要从一个点(如AOP)实现记录器,因为在AOP中,只有我们可以将记录器应用于整个流(控制器层->服务层->助手类)。。因此,我实现了它,在这种情况下,我无法访问params对象。因此,我需要帮助访问AOP类中的params对象。
class UserController {
  def index() {
  }

  def afterInterceptor = {
    log.debug "action:$actionName -> $params"
  }
}
class LoggingFilters {

  def filters = {
    logging(controller:'*', action:'*') {
      after = {
        log.debug "controller:$controllerName action:$actionName -> $params"
      }
    }
  }

}