Spring MVC 根据 controller 层方法入参和返回值动态生成日志 - 下 :借助 SpEL 或自定义的方式解析日志表达式

本文介绍如何在Spring MVC中根据controller层方法的入参和返回值动态生成日志。通过定义注解和日志表达式,实现了两种解析方式:自定义表达式解析和SpEL表达式解析。自定义表达式允许直接取值或递归调用getter方法,而SpEL则提供更强大的功能,包括算术运算、逻辑判断等。文章详细讲解了实现思路和代码实现,并给出了示例和GitHub链接。
摘要由CSDN通过智能技术生成

上一篇文章已经就如何获取到 controller 层方法的参数和返回值进行了详细分析,并且封装了 HandlerMethodPostProcessor 接口以便使用,接下来就实现业务需求:根据 controller 层方法的入参和返回值动态生成日志。

实现日志解析

实现思路是这样的:定义一个注解,注解的 value 为日志表达式,HandlerMethodPostProcessor#postProcessorAfterInvoke 方法中判断 HandlerMethod 是否使用了该注解,使用了就解析其日志表达式。

日志需要根据参数和返回值动态生成,所以需要在日志表达式中提供一种方式能取到两者的值,这里提供两种实现方式:

  1. 自己定义参数和返回值的获取表达式,在 postProcessorAfterInvoke 方法中解析时再将其替换为具体值
  2. 使用 SpEL 表达式,需要将参数和返回值添加到 org.springframework.expression.spel.support.EvaluationContext中,并借助 SpEL 的 API 进行解析

第一种方式需要自己解析日志表达式,比较复杂,所以我的实现里只是进行了简单的取值,也可以对参数和返回值的成员通过 getter 递归取值;SpEL 表达式提供了强大而完备的功能,可以进行算数运算,逻辑判断,也可以获取其他 bean、java 类、系统参数或项目参数,但对于简单的日志表达式可能不需要这么多的功能,可以按需使用两种方式。

自定义日志表达式

表达式的解析规则如下

    • 0
      点赞
    • 0
      收藏
      觉得还不错? 一键收藏
    • 0
      评论
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值