spring-mvc - 将上下文注入(inject)类似于 Jersey InjectableProvider 的 Spring MVC Controller

标签 spring-mvc

我在我的 Jersey 项目中有一个自定义的 InjectableProvider,它对请求/ session 做了一些工作,以产生我的 RESTful 服务所需的用户 ID。这意味着我可以编写如下服务方法:

@GET
@Produces(MediaType.APPLICATION_JSON)
public String getByAccountIdAndGroup(@InjectAccount(required=false) String accountId, @DefaultValue("default") @QueryParam("productGroup") String productGroup) {
...
}

@InjectAccount 是我的自定义注释。

我想在同一个项目中为 SpringMVC Controller 做类似的事情。也就是说,我希望能够写:
@RequestMapping(method = RequestMethod.GET)
public String showForm(Model model, @InjectAccountSpringMvc String accountId) {
...
}

我期望必须排除通用代码,而不是直接重用 Jersey InjectableProvider。

可能更以 Spring 为中心的方式是将线程范围 bean 注入(inject)到我的 Controller 中,但我很好奇 Jersey 风格是否可以在 Spring MVC 中完成。使用线程范围方法,注入(inject)的服务可能如下所示:
@Component
@Scope("THREAD")
public class AccountResolver {
   @Autowired
   private HttpServletRequest request

   private String theAccount=null;

   public String getAccount() {
      if ( theAccount == null ) {
         theAccount=resolveAccount();
      }
      return theAccount;
   }
}

这不是那么整洁,并且会使直接测试 Controller 变得更加困难。

任何想法/指针表示赞赏!

阿尔菲。

最佳答案

是的,这可以在 Spring 完成。您需要实现并注册您自己的 HandlerMethodArgumentResolver .
supportsParameter方法将简单地查找参数上的注释。 resolveArgument方法将执行在调用处理程序方法时检索要使用的参数的逻辑。

关于spring-mvc - 将上下文注入(inject)类似于 Jersey InjectableProvider 的 Spring MVC Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25654041/

相关文章:

java - 如何在 Postman 中上传文件和 JSON 数据?

java - 更改 Spring 应用程序启动消息

java.lang.NullPointerException : Cannot get property 'grailsResourceProcessor' on null object

java - 将 Spring 存储库注入(inject) Spring @Configuration 类

spring - 使用 <util :properties> in spring 3 加载多个属性文件

angularjs - Uncaught Error : [$injector:modulerr] http://errors. angularjs.org/1.2.16

Java Spring MVC - 模型中类的动态属性名称

java - 如何在 Spring 中从 @RequestMapping 中排除 url 映射?

java - 为什么我的 RESTful API 在执行 SQL 查询时如此慢?但当我刚刚运行查询时速度很快

java - 在spring mvc中上传图片