在 Guice 模块中获取 http 请求标头值



我需要获取请求标头值并将其注入构造函数,而类由Guice实例化。似乎Guice模块无法访问http.context!正确的方法是什么?

@Provides
protected class CustomerProvider @Inject()(dataClient: DataClient) extends Provider[CustomerRepository] {
  override def get(): CustomerRepository = {
    implicit val productType:String = Option(Context.Implicit.request.getHeader("abc")).getOrElse("xyz")
    val session = dataClient.session(productType)
    new CustomerRepository(session)
  }

我收到错误消息:此处没有可用的 HTTP 上下文。当我做上述操作时!?

我认为你不能这样做。Guice 中有一个会话上下文,但在游戏中没有会话。参见[这][1.因此,当提供方法运行时,没有可用的特定上下文。您可以做的是构造一个无状态的单一实例,并让该方法接受请求上下文。像这样:

@Provides
protected class CustomerProvider @Inject()(dataClient: DataClient) 
  extends Provider[CustomerRepository] {
   override def get(): CustomerRepository = {
       new CustomerRepository()
  }
}
class CustomerRepository @Inject()(collaborator: CCC) {
   def doSomething(param1, param2)(implicit request: RequestHeader)
}

最新更新