怎样通过自定义注解获取controller方法的入参?

qq_36628260 2018-08-16 09:07:53
@Target({ ElementType.TYPE, ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
public @interface Action{

long ordercode() default 1;

}
这是我写的自定义注解;
@Action(ordercode=11)
@ResponseBody
@RequestMapping(value = "")
public Object enableOrDisableItemById(@RequestParam("id") Long id,@RequestParam("status") Long status){}
我在这个controller方法上写入了@Action注解,可是现在我想让@Action的ordercode获取入参中的id。找了好久没有找到解决方法,有哪位大神能帮帮忙。
...全文
2193 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Loy小新 2019-05-28
  • 打赏
  • 举报
回复
引用 5 楼 Loy小新 的回复:
spring EL 表达式 @Action(ordercode="#id")
需要把注解加在方法上
Loy小新 2019-05-28
  • 打赏
  • 举报
回复
spring EL 表达式 @Action(ordercode="#id")
BUG胡汉三 2018-08-16
  • 打赏
  • 举报
回复
你是想改变Action中的ordercode,我没想到又什么好办法。
但是通过spring mvc 的拦截器可以获取到方法的请求参数:https://blog.csdn.net/qq_27292113/article/details/76839443
然而你不可能把所有的请求都拦截下来判断,所以需要判断方法是否加上了你的注解,只有加上了注解的才做处理,最后在你的拦截器中处理业务:

public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
//如果不是映射到方法直接通过
if (!(handler instanceof HandlerMethod)) {
return true;
}
HandlerMethod handlerMethod = (HandlerMethod) handler;
Method method = handlerMethod.getMethod();

//如果验证token失败
if (method.getAnnotation(Action.class) == null) {
return true;
}

//从request中得到你想要的参数


业务代码


return true;
}


当然,我也不知道是否能解决你的问题!
不行就多考虑其他方案吧。
寸辰 2018-08-16
  • 打赏
  • 举报
回复
你要搞清楚,注解属于静态配置,你让一个静态配置获取动态数据靠谱么?
亿叶至秋 2018-08-16
  • 打赏
  • 举报
回复
这是我之前,自定义注解在切面类中,使用的方法,可以获取注解的自定义属性,也可以获取执行的方法的入参,看看对你有没有帮助

@Around("newAdvice()&&@annotation(myAnnotation)")
public Object go(ProceedingJoinPoint pjp, MyAnnotation myAnnotation) {
Object proceed = null;
String value = myAnnotation.value();//获取自定义注解@MyAnnotation的属性value值
System.out.println("MyAnnotation的属性value值:" + value);
String methodName = pjp.getSignature().getName();//执行的方法名
Object[] args = pjp.getArgs();//获得方法参数,注意这里是数组
System.out.println("将要执行:" + methodName + "方法;");
try {
System.out.println("===方法执行之前操作===");
proceed = pjp.proceed();//要执行的方法
System.out.println("===方法执行之后操作===");
} catch (Throwable e) {
e.printStackTrace();
}
return proceed;
}
qq_36628260 2018-08-16
  • 打赏
  • 举报
回复
这种方法只能获取注解的静态数据,无法获取方法的参数

67,515

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧