@RequestScoped
public class CurrentTransaction {
private String user;
private String token;
@PersistenceContext(name="mysql")
protected EntityManager em;
@Inject HttpServletRequest request;
public CurrentTransaction() {
this.user = request.getHeader("user");
this.token = request.getHeader("token");
}
//getters and setters ...
}
@Stateless
@Path("/areas")
public class AreasEndpoint {
@PersistenceContext(unitName = "mysql")
protected EntityManager em;
@Inject
protected CurrentTransaction current_user_service;
@POST
@Path("postman")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
@Authentication
public Response create(AreaRequest request) {
if (this.current_user_service.getUser() == null) {
System.out.println("Go!!!");
return Response.status(Status.FORBIDDEN).build();
} else {
System.out.println("---- user: " + this.current_user_service.getUser());
System.out.println("---- token: " + this.current_user_service.getToken());
}
}
// ...
}
CDI到达以执行CurrentTransaction
类的构造函数。但是,HttpServletRequest
请求字段未初始化(注入)。
我做错了什么?
关于这个问题的一个最新答案--可能对其他读者有用:CDI中的依赖注入是按照以下顺序完成的:
@PostConstruct
带注释的方法最后一点是您想要进一步初始化的地方,需要对注入的字段进行访问:
@Inject HttpServletRequest request;
public CurrentTransaction() {
// field injection has not yet taken place here
}
@PostConstruct
public void init() {
// the injected request is now available
this.user = request.getHeader("user");
this.token = request.getHeader("token");
}
问题内容: 我正在使用ejb 3并尝试@Inject HttpServletRequest,但是在部署时发生异常。 码: 例外: 我该怎么办? 问题答案: HttpServletRequest的生命周期由EJB / Web容器而不是CDI容器管理。尝试注入它会导致问题,因为通常会有很多接口实现,并且您的CDI容器没有足够的信息来决定要注入哪种实现。即使您成功注入了它的实例,它也 不会 与EJB容器
问题内容: 我正在尝试按照此处的示例创建工厂以注入HttpSession。不幸的是,无论我尝试什么,都无法正常工作。不知道可能是什么问题。 我试过只注入HttpServletRequest和提供程序。这是我使用提供程序的示例。尝试在provide方法中访问提供程序时,该错误是空指针异常。如果我尝试注入HttpServletRequest,那么将无法获取任何对象。我正在使用JerseyTest在Gr
我正在尝试将 HttpServlet 请求注入到我的泽西岛资源类中。我得到错误“”。我使用的是 Java 8。 据我所知,我正在做一个完全普通的球衣应用程序。以下是全部代码: 它阻塞了@Context HttpServletRequest部分。如果我将HttpServletRequest设置为一个字段,它将自动失败,请求为空。 以下是依赖关系。jersey.version为2.27: 这是完整的堆
问题内容: 我正在尝试在Spring中建立一个请求范围的bean。 我已经成功设置好了,所以每个请求创建一次bean。现在,它需要访问HttpServletRequest对象。 由于该bean是每个请求创建一次的,所以我认为容器可以轻松地将请求对象注入到我的bean中。我怎样才能做到这一点 ? 问题答案: 可以将请求范围的Bean与请求对象自动连接。
将HttpServletRequest或HttpServletResponse注入@RestController类中的@RequestMapping方法会导致异常(至少在@SpringBootTest注释启用测试中): 错误: 这是Spring的错误吗?我做错了吗?我几乎可以肯定地通过消除过程跟踪它到HttpServletRequest注入,而不是@Request estParamJSON(一种自