RequestParam 和 PathVariable 上的自定义注释

问题描述

我创建了自定义注释

annotation class UserControl(
    val userIdentifier: String
)

我想将此注释应用于查询参数和不同控制器中的路径变量。

    fun userWithMobile(
        @UserControl("PhoneNumber")
        @RequestParam mobile: String
    ): RegisteredUser {
        return userManager.getUserWithPhoneNumber(mobile))
    }

如何检查查询参数是否具有 UserControl 注释,并对其进行一些处理。是否有编写全局处理程序或为此的处理器的标准方法

希望得到任何帮助

解决方法

AspectJ 可以直接匹配参数注解,但不能将它们绑定到通知方法值,如类或方法注解。所以如果你只想匹配它们,一个简单的切入点就足够了。如果您想访问注释及其参数值,则需要一点反射魔法。我已经多次回答相关问题,这就是为什么我要关闭这个作为副本。但首先,这里是您想要阅读的资源。它们都与您的问题有关,展示了如何处理不同特定情况的示例:

基本上,您需要以下切入点或它的一些变体:

execution(* *(..,@my.package.UserControl (*),..))

不匹配切入点中的参数的幼稚、效率较低的方法,仅使用反射: