我的“路线”文件中有这个:
POST /accounts/ controllers.AccountsController.createOneAccount
在我的 ACCoutsController.java 中:
package controllers;
import com.google.inject.Inject;
import play.Application;
import play.mvc.Controller;
import play.mvc.Result;
import services.AccountService;
import java.io.IOException;
public class AccountsController extends Controller {
@Inject
private Application application;
final String host = application.configuration().getString("db.default.host");
final int port = application.configuration().getInt("db.default.port");
final String dbName = application.configuration().getString("db.default.dbname");
@Inject
private AccountService accountService;
public Result createOneAccount() throws IOException {
return accountService.createOneAccount(request().body().asJson());
}
}
这段代码编译得很好,但是在运行时我得到了这样的错误:
ProvisionException: Unable to provision,见以下错误:1) Error injection constructors, java.lang.NullPointerException at controllers.AccountsController.(AccountsController.java:11)
在为 router.Routes.(Routes.scala:28) 的参数 1 定位 controllers.AccountsController 的同时定位 router.Routes 在定位 play.api.inject.RoutesProvider 的同时为 play.api 的参数 0 定位 play.api.routing.Router .http.JavaCompatibleHttpRequestHandler.(HttpRequestHandler.scala:200) 同时在 play.api.DefaultApplication.(Application.scala:221) 中找到 play.api.http.HttpRequestHandler 的参数 4 时找到 play.api.http.JavaCompatibleHttpRequestHandler。 api.DefaultApplication.class(Application.scala:221) 同时定位 play.api.DefaultApplication 同时定位 play.api.Application 1 错误
我可以通过将 @ 添加到路由文件来解决此问题:
POST /accounts/ @controllers.AccountsController.createOneAccount
但我不确定为什么我需要这样做,以及如何避免'@'。请给一些建议。