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

时间:2014-11-13 10:34:54

标签: spring grails spring-aop

我有一个控制器, params 对象包含id,username,max和offset值。

我正在尝试访问Aop中的 params 对象,但它只给出了默认长度和类参数。

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

Controller ::

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:10,722 [http-bio-8080-exec-5] INFO aop.LogInterceptor - logBefore:com.sample.controller.UserController.getMetaClass([])

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

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

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

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

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

提前致谢

1 个答案:

答案 0 :(得分:0)

在最简单的情况下,您可以使用link中的controller interceptors

class UserController {
  def index() {
  }

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

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

class LoggingFilters {

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

}