java - ProvisionException 使用 PlayFramework 2.4.2

标签 java playframework dependency-injection playframework-2.4

我正在将一个项目从 Play 2.2.4 迁移到 2.4.2,我遇到了一个我无法理解和解决的异常。

Unexpected exception

ProvisionException: Unable to provision, see the following errors:

1) Error injecting constructor, java.lang.NullPointerException
  at controllers.Application.<init>(Application.java:33)
  while locating controllers.Application
    for parameter 1 at router.Routes.<init>(Routes.scala:36)
  while locating router.Routes
  while locating play.api.inject.RoutesProvider
  while locating play.api.routing.Router

1 error

这是因为我为 WS API 添加了依赖注入(inject),例如:

public class Application extends Controller {

    @Inject
    WSClient ws;

    WSRequest request = ws.url("https://...");

    ...
}

build.sbt 文件包含必要的配置

libraryDependencies ++= Seq(
  javaJdbc,
  cache,
  javaWs
)

// Play provides two styles of routers, one expects its actions to be injected, the
// other, legacy style, accesses its actions statically.
routesGenerator := InjectedRoutesGenerator

什么可能遗漏或做错了什么?

最佳答案

此行导致 Nullpointer: ws.url("https://..."); 当 Guice 实例化 Application 类时 ws 为空。此外,将 request 作为 Controller 字段不是线程安全的。将您的代码更改为以下内容:

public class Application extends Controller {

    private WSClient ws;

    @Inject
    public Application(WSClient ws) {

        this.ws = ws;
        WSRequest request = this.ws.url("https://...");

        ...
    }
}

关于java - ProvisionException 使用 PlayFramework 2.4.2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31610945/

相关文章:

java - JQuery Address 管理应用程序状态的简单示例

java - PHP后端,Java前端。这可能吗?

java - 设置图像中像素的颜色

scala - EssentialAction : How to Get the Body of a Request without Parsing It

javascript - 需要了解 Angular.js 中的依赖注入(inject)

javascript - Angular 2 注入(inject)器层次结构和 NgModule

asp.net - 如何让 Autofac 在 Orchard CMS 中执行属性注入(inject)

java - Eclipse 'generate entities from tables' 和 'many to one' 关系

java - 使用 compareTo 对对象进行排序(多种类型)

scala - 使用 Play Json 将可选的 json 字段转换为选项?