gpt4 book ai didi

java - 从Spring MVC拦截器访问Controller的方法参数值

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:13:36 25 4
gpt4 key购买 nike

我正在使用 Spring MVC 开发一个 REST web 服务,我已经实现了一个自定义注释,以便用它来注释 Controller 方法。此注释可能包含一个 SpEL 表达式,我必须考虑 Controller 方法参数值来评估它。所以,我的想法是为此实现一个 Spring MVC 拦截器,但是 preHandle 方法中的参数 HandlerMethod 只是一种识别方法的方法,不提供对 Controller 方法参数值的访问。所以,我能想到的唯一办法就是开发一个Spring AOP切面,拦截所有对注解方法的调用。顺便说一下,我需要访问请求,所以如果我采用 AOP 方式,所有带注释的方法都应该包含请求的参数。

所以,我的问题是:有什么方法可以从 Spring MVC 拦截器访问方法参数值,还是应该采用 Spring AOP 方式?

提前致谢。

最佳答案

不能在拦截器的preHandle方法中使用controller方法参数,因为在调用它的时候,controller方法的参数还没有构造(request和response除外) .

所以你将不得不采用 AOP 方式(不要忘记在你的 Controller 中实现一个方法......)就像 JavaBond 答案中解释的那样。但是多亏了 spring 框架,你可以避免所有带注释的方法都应该在请求中包含一个参数。 RequestContextHolder.getRequestAttributes() 为您提供了一个 RequestAttributes 对象。如果您知道您的请求一个HttpServletRequest,您可以将它转换为一个ServletRequestAttributes,然后通过getRequest访问 native 请求() 方法:

RequestAttributes reqAttr = RequestContextHolder.getRequestAttributes();
HttpServletRequest req = ((ServletRequestAttributes) reqAttr).getRequest();

关于java - 从Spring MVC拦截器访问Controller的方法参数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24604593/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com