问题描述
我创建了自定义注释
annotation class UserControl(
val userIdentifier: String
)
我想将此注释应用于查询参数和不同控制器中的路径变量。
fun userWithMobile(
@UserControl("PhoneNumber")
@RequestParam mobile: String
): RegisteredUser {
return userManager.getUserWithPhoneNumber(mobile))
}
如何检查查询参数是否具有 UserControl 注释,并对其进行一些处理。是否有编写全局处理程序或为此的处理器的标准方法?
希望得到任何帮助
解决方法
AspectJ 可以直接匹配参数注解,但不能将它们绑定到通知方法值,如类或方法注解。所以如果你只想匹配它们,一个简单的切入点就足够了。如果您想访问注释及其参数值,则需要一点反射魔法。我已经多次回答相关问题,这就是为什么我要关闭这个作为副本。但首先,这里是您想要阅读的资源。它们都与您的问题有关,展示了如何处理不同特定情况的示例:
- https://stackoverflow.com/a/38162279/1082681
- https://stackoverflow.com/a/10595712/1082681
- https://stackoverflow.com/a/50540489/1082681
- https://stackoverflow.com/a/49872132/1082681
- https://stackoverflow.com/a/61284425/1082681
- https://stackoverflow.com/a/16624766/1082681
基本上,您需要以下切入点或它的一些变体:
execution(* *(..,@my.package.UserControl (*),..))
不匹配切入点中的参数的幼稚、效率较低的方法,仅使用反射: