Spring MVC 如何为控制器方法提供可注入

Posted

技术标签:

【中文标题】Spring MVC 如何为控制器方法提供可注入【英文标题】:Spring MVC How to provide injectable for controller method 【发布时间】:2016-12-09 00:39:52 【问题描述】:

Spring MVC 控制器方法接受在调用方法之前注入的不同参数。比如HttpServletRequestHttpServletResponsejava.security.Principal

@RequestMapping("/test")
public String test(HttpServletRequest req, Principal user)

如何声明可以注入到控制器方法中的东西?

@RequestMapping("/test")
public String test(MyCustomInjectable myInjectable)

更多具体案例:

我想在一些 servlet 过滤器中解析 HttpServletRequest 并构造一个将在控制器方法中使用的对象。更准确地说,我将解析 JWT 令牌并访问声明。

【问题讨论】:

如果是同一个请求对象,您可以将请求中的每个字段值设置为请求属性,spring会根据请求属性名称自动创建您的自定义对象。如果您稍后在其他请求中需要自定义对象,您可以从请求中获取会话并使用会话属性将自定义对象保存在会话中 可能相关:***.com/questions/17741787/… 【参考方案1】:

可以选择创建自定义HandlerMethodArgumentResolver

【讨论】:

正是我想要的。谢谢。 如果使用这个,可以注入一个原型bean,该bean配置有带有InjectionPoint参数的工厂方法,并以这种方式注入一个依赖于其他参数的自定义bean控制器方法(例如,路径变量)?

以上是关于Spring MVC 如何为控制器方法提供可注入的主要内容,如果未能解决你的问题,请参考以下文章

Spring MVC:如何为索引页面创建默认控制器?

spring/hibernate 如何为我们提供防止 SQL 注入的保证以及它是如何在内部处理的?

如何为JSP配置spring boot mvc app?

asp.net MVC 如何为一个视图中某个表单(Form)指定某个提交方法(如CreateRole)

Spring BootSpring MVC 和 Spring 有什么区别?

如何为 .NET 库配置具有依赖注入的日志记录提供程序