Ninja框架没有获取POST数据或看到NinjaProperties

时间:2014-07-14 20:50:26

标签: json ninjaframework

这里有两件事情出错,这可能是两个问题,或者可能有相同的根:他们都觉得某处是配置错误,因此将它们组合在一起。如果这个问题令人困惑,道歉就会提前......

我正在使用Ninja Framework,仍然从Hello World示例开始学习。我可以使用路由,控制器和HTML确定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回来了。

问题2:在Ninja docs描述的JSON解析,其中向控制器签名添加具有正确字段名称的简单类导致JSON在幕后被翻译是不起作用的。我可以使用正确的字段将类添加到Controller方法签名中,但它始终为null。使用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);
    ...
}

有什么想法吗? 提前谢谢......

1 个答案:

答案 0 :(得分:2)

没有代码真的很难说为什么你的应用程序无法运行。这两件事应该只是开箱即用,所以在生产应用程序和我们的集成测试中工作非常好。

关于1)的一些想法 这是一个工作示例: https://github.com/ninjaframework/ninja/blob/develop/ninja-servlet-integration-test/src/main/java/controllers/ApplicationController.java

正如您所见,NinjaProperties已经注入并在那里工作。只需将其与您的代码进行比较......应该可以直接修复。

根据你的说明,很明显发生了什么。你正在使用" new"。如果您使用" new"你将打破任何注射框架。如果你将UsersDB注入你的控制器,然后在exectued usersDb上执行方法,它就会起作用。要么使用new,要么不要在这些类中使用@Inject。或者使用@Inject,还可以@Inject你注入的类。这与Java下的注入框架(尤其是Guice)的工作方式有关。

关于2)的一些想法

这里再次使用一些代码来解析Json: https://github.com/ninjaframework/ninja/blob/develop/ninja-servlet-integration-test/src/main/java/controllers/PersonController.java

也应该开箱即用。但有一件事 - 您必须确保请求包含标题内容类型:application / json - 否则Ninja无法知道如何解析传入的请求。

我相信这很容易解决。如果有帮助,请告诉我们!