1

ここで 2 つの問題が発生しています。これは 2 つの問題であるか、同じ根源を持っている可能性があります。どちらもどこかで構成エラーのように感じられるため、それらをまとめています。これが問題を混乱させている場合は、お詫び申し上げます...

私は Ninja Framework を使用していますが、Hello World の例から始める方法をまだ学んでいます。Routes、Controller、および html OK を使用して、GET および POST でページを提供できます。

関連する場合に備えて、NetBeans を使用して書き込み、Firefox をテストして、新しい CentOS VM で実行しています。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 メソッド シグネチャに追加できますが、常に 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);
    ...
}

何か案は?前もって感謝します...

4

1 に答える 1

2

コードがなければ、アプリが機能しない理由を説明するのは非常に困難です。どちらも箱から出してすぐに動作するはずなので、本番アプリケーションや統合テストでは問題なく動作します。

1) に関するいくつかのアイデア) これが実際の例です: https://github.com/ninjaframework/ninja/blob/develop/ninja-servlet-integration-test/src/main/java/controllers/ApplicationController.java

ご覧のとおり、NinjaProperties が挿入され、そこで動作しています。それをあなたのコードと比較してください...修正するのは簡単です。

あなたのメモに基づいて、何が起こっているのかはかなり明確です。あなたは「新しい」を使用しています。「new」を使用すると、インジェクション フレームワークが壊れます。UsersDB をコントローラーに @Inject し、実行された usersDb でメソッドを実行すると、機能します。new を使用し、それらのクラス内で @Inject を使用しないでください。または @Inject を使用するだけでなく、注入するクラスそのものを @Inject します。これは、Java でのインジェクション フレームワーク (および特に Guice) の動作に関連するものです。

2)に関するいくつかのアイデア

ここでも、Json を動作させて解析するコードがいくつかあります

また、すぐに使用できるはずです。ただし、リクエストにヘッダー content-type: application/json が含まれていることを確認する必要があります。そうしないと、Ninja は着信リクエストを解析する方法を認識できません。

これは簡単に修正できると確信しています。それが役に立ったかどうか教えてください!

于 2014-07-15T18:30:58.243 に答える