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