【发布时间】:2014-09-04 21:55:18
【问题描述】:
这里有两个问题,可能是两个问题,或者可能有相同的根源:它们都感觉像是某个地方的配置错误,因此将它们放在一起。如果这使问题令人困惑,请提前道歉......
我正在使用 Ninja Framework,仍然从 Hello World 示例开始学习。我可以使用 Routes、Controller 和 html OK 为页面提供 GET 和 POST。
如果相关的话,我正在一个新的 CentOS VM 上运行,使用 NetBeans 编写,Firefox 进行测试。我已经重启了 Ninja(很多次)。
问题 1:NinjaProperties 在代码中不可见。我已经明白我可以把,例如
import com.google.inject.Inject;
public abstract class PersistDB {
@Inject
NinjaProperties ninjaProperties;
...
protected void loadProps() {
dbReadServer = ninjaProperties.getWithDefault(DB_READ_SERVER_PROP, DBSERVER_DEFAULT);
...
}
}
public class UsersDB {
public UsersDB() {
loadProps();
}
}
并让我的模型代码访问 application.conf 文件以提取属性。但是 ninjaProperties 会返回 null。
问题 2:Ninja docs 中描述的 JSON 解析在控制器签名中添加具有正确字段名称的简单类导致 JSON 在幕后被翻译不起作用。我可以将具有正确字段的类添加到 Controller 方法签名,但它始终为空。使用 GSON,我可以为自己提取对象,因此我有一个解决方法,但这也证实了它在 Ninja 中不起作用。
代码非常接近示例:
package controllers;
public class UserRegisterReq {
String email;
String identName;
String password;
}
和
package controllers;
import com.google.inject.Singleton;
import models.user.User;
import models.user.UserResult;
import ninja.Context;
import ninja.Result;
import ninja.Results;
import ninja.session.Session;
@Singleton
public class UserController {
...
public Result doRegisterPost(UserRegisterReq req, Context context) {
Session session = context.getSession();
UserResult ur;
ur = User.registerUser(req.email, req.password, req.identName);
...
}
有什么想法吗? 在此先感谢...
【问题讨论】:
-
如何获取或创建 UsersDB 的实例?
-
class User { public static UsersDB usersDB = new UsersDB(); }(现在,我敢说有一个更整洁的解决方案) -
好的...编辑了我的答案。很明显,“新”会破坏依赖注入。我在下面解释了一下。
-
拉夫,谢谢。注射链不是我发现的要求。感谢您提供非常清晰的解释。要实现这一点,需要对您的答案进行补充:而不是从构造函数调用 loadProps() 我还必须 @Inject loadProps 的定义。
标签: json ninjaframework