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

标签 java spring spring-mvc

我正在使用 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/

相关文章:

java - 如何在 jCalendar 中设置 "off"所有切换日期按钮?

java - 如何在没有mvn jboss-as :deploy的情况下测试从eclipse到jboss as7的Web项目

java - 如何停止 ThreadPoolTask​​Executor 中所有正在运行的线程?

javascript - 使用 spring mvc 和 apache pdf 框从 UI 下载的空的和损坏的 pdf 文件

java - 我如何在带有 spring 的 servlet 过滤器中使用 @Transactional 和 sessionFactory bean

java - 使用 Linkify.addLinks 结合 Html.fromHtml

java - 如何使hibernate映射成为创建的表?

spring - 如何在 Redis 中存储 JSF session ?

grails - 从 Roo 迁移到 Grails

java - 无法在 PDBox PDF 文档中插入制表符和空格