我正在尝试使用弹簧注射在Jersey-Filter中注入一个物体。
如果我尝试 @Inject 方法,那么我最终会遇到异常
SEVERE: StandardWrapper.Throwable
MultiException stack 1 of 2
java.lang.IllegalStateException: Could not find an active context for org.jvnet.hk2.spring.bridge.api.SpringScope
at org.jvnet.hk2.internal.ServiceLocatorImpl._resolveContext(ServiceLocatorImpl.java:2058)
at org.jvnet.hk2.internal.ServiceLocatorImpl.access$000(ServiceLocatorImpl.java:120)
at org.jvnet.hk2.internal.ServiceLocatorImpl$2.compute(ServiceLocatorImpl.java:186)
at org.jvnet.hk2.internal.ServiceLocatorImpl$2.compute(ServiceLocatorImpl.java:182)
如果我尝试使用在泽西岛1.x中定义的 @InjectParam ,但是我使用的是没有找到此注释的Jersey 2.17。
知道如何在平针织过滤器中进行弹簧注射吗?
该例外是什么意思?
Could not find an active context for org.jvnet.hk2.spring.bridge.api.SpringScope
答案 0 :(得分:0)
更新修改 另外,您可以提供构造函数注入。 Jersey的构造函数注入在Filter中而不是Field Injections中为我工作
旧:
我是通过在过滤器中注入 javax.servlet.ServletContext 并使用它来使用 WebApplicationContextUtils
来获取beanId来实现的。public class LoginFilter implements ContainerRequestFilter {
@Context private HttpServletRequest servletRequest;
@Context private HttpServletResponse servletResponse;
@Context private ServletContext servletContext;
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
try {
WebApplicationContext springContext =
WebApplicationContextUtils.getWebApplicationContext(servletContext);
CookieAuthenticator cookieAuthenticator = springContext.getBean(CookieAuthenticator.class);
LoginInterceptorHelper loginInterceptorHelper = springContext.getBean(LoginInterceptorHelper.class);
HttpSession session = request.getSession(true);
UserSummary user = (UserSummary) session.getAttribute(WebConstants.USER_DETAIL);
通过包含一个弹簧监听器,弹出初始化首先发生。
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
这很有效。 但是我没有注入,而是明确地加载了依赖项。 有没有更好的方法呢?