gpt4 book ai didi

JavaEE CDI 注入(inject) - 无法注入(inject) HttpServletRequest/Response

转载 作者:太空宇宙 更新时间:2023-11-04 12:25:31 24 4
gpt4 key购买 nike

我有一个读取查询参数的 Web 应用程序。它使用该参数从外部应用程序源获取一些数据。 Web 应用程序是一个简单的 Servlet:

@WebServlet(name = "SomethingServlet", urlPatterns = {"/"}, loadOnStartup = 0)
public class SomethingServlet extends HttpServlet {

@Inject
InterfaceOfDesire objectOfDesire;

protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
objectOfDesire.doSomething();
}
}

InterfaceOfDesire 是一个 (atm) 实现一次的接口(interface)。所以不应该有任何歧义。

public interface InterfaceOfDesire {
void doSomething();
}


public class ClassOfDesire implements InterfaceOfDesire {
@Override
public void doSomething() {
// do something very cool
}
}

最后但并非最不重要的一点是,有一个解析器可以解析实现的类的类型(atm 仅 1)

public class SomethingResolver {
@Inject
private HttpServletRequest request;
@Inject
private HttpServletResponse response;

@Inject
public SomethingResolver(ServletContext servletContext) {
// do something with the servlet context
}

@Produces
public InterfaceOfDesire getInstance() {
// do something with request and response
// afterwards return object
return new ClassOfDesire();
}
}

现在我收到错误

WELD-001408: Unsatisfied dependencies for type HttpServletResponse with qualifiers @Default

我做错了什么?

最佳答案

我想说 bean (SomethingResolver) 需要以某种方式绑定(bind)到 HTTP 请求或其 session 。只有这样它才能访问HttpServletRequest(或响应)。

尝试使用 @RequestScoped 对其进行注释。 @SessionScoped 也可能有效。

这背后的原因是,按照您现在的方式,bean 生命周期并不与请求绑定(bind) - 它甚至可以比请求更长。 CDI 无法告诉应该将哪个 servlet 请求注入(inject)其中。

关于JavaEE CDI 注入(inject) - 无法注入(inject) HttpServletRequest/Response,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38439083/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com