是否有一种简单的方法可以使用CDI注入快速获取URL中所有GET参数的列表?
我正在寻找的是:
@Inject
Map<String, String> allGetParams;
答案 0 :(得分:3)
就像已经说过的那样,你没有开箱即用,但是你可以像CDI 1.1 +那样产生它
public class MyProducer {
@Produces
@RequestScoped
Map<String,String[]> produceParamMap(HttpServletRequest request) {
return request.getParameterMap();
}
}
在CDI 1.0中,您必须使用Apache Deltaspike servlet module并编写几乎相同的
public class MyProducer {
@Produces
@RequestScoped
Map<String,String[]> produceParamMap(@Deltaspike HttpServletRequest request) {
return request.getParameterMap();
}
}
编辑:更多详情
生成器(使用@Produces
注释声明)是一种在CDI中声明bean的方法。这种豆子可以像其他豆子一样注射。这将是:
@Inject
Map<String,String[]> params;
所以你不调用生成器方法,它是用它来实例化bean的CDI容器。
当您使用参数声明一个producer方法时,容器将查找与这些参数匹配的bean以调用该方法。这些bean的存在是在引导时检查的,并且它们不存在抛出异常(就像任何带有未满足bean的注入点一样)。
在这两种情况下,HttpServletRequest类型的bean都是由CDI实现(CDI 1.1+)或Deltaspike框架(CDI 1.0)为您提供的。