1

いくつかの電話番号を受け取り、SMS を送信する残りのサービスに投稿する Java を使用して Play2 アプリケーションを構築しています。

コントローラーを作成しましたが、コントローラーがリクエストを処理し、Java リストへのアンマーシャリングを実行すると考えています。次に、呼び出しを処理する SmsService クラスを作成することを考えていました。私が理解できないのは、これを Play2 の方法で実装する方法です。

Controller で、new と入力して SmsService をインスタンス化しますか? それとも、依存性注入を使用しますか? 多分私は春のバックグラウンドに彩られ、インジェクションのことはすべて忘れて、コントローラーにすべてを書きますか? おそらくメソッドを静的にして、SmsService.sendSms(numbers) のような SmsService を使用します。

Play2 の 2.1 フォルダーに続くサンプルを確認しましたが、そこにあるサンプルはこのケースを処理しません。私はおそらくドキュメントで何かを見逃しています。

これをどのように行いますか。また、その理由は何ですか。

SMS コントローラー:

public class Sms extends Controller {

    private static final ObjectMapper mapper = new ObjectMapper();        

    @BodyParser.Of(value = BodyParser.Json.class)
    public static Result inviteToReview() {
        ObjectNode result = Json.newObject();

        JsonNode json = request().body().asJson();
        if(json == null) {
            result.put("status", "KO");
            result.put("message", "Missing phone number list [phone_numbers]");
            return badRequest(result);
        }

        List<String> numbers = new ArrayList<String>();    
        TypeReference collectionType = new TypeReference<ArrayList<String>>() {
        };
        try {
            numbers = mapper.readValue(json.get("phone_numbers"), collectionType);
        } catch (IOException e) {
            // handle error
        }

        SmsService smsService = new SmsService();
        result = smsService.sendSms(numbers);
        return ok(result);
    }
}
4

1 に答える 1

0

私は今答えを得たので、私はこのようにしました。

グローバル:

public class Global extends GlobalSettings {

    private static final Injector INJECTOR = createInjector();  

   /**
     * Need for injection.
     *
     * @param controllerClass
     * @param <A>
     * @return
     * @throws Exception
     */
    @Override
    public <A> A getControllerInstance(Class<A> controllerClass) throws Exception {
        return INJECTOR.getInstance(controllerClass);
    }

    private static Injector createInjector() {
        return Guice.createInjector();
    }
}

コントローラ:

public class Sms extends Controller {

    private static final ObjectMapper mapper = new ObjectMapper();

    @Inject
    private SmsService smsService;

    @BodyParser.Of(value = BodyParser.Json.class)
    public Result invite(){
        ObjectNode result = Json.newObject();
        smsService.sendSms(new ArrayList<String>());
        result.put("status", "OK");
        //cool stuff ehere
        return ok(result);
    }
}

ルート:

GET /sms/invite    @controllers.Sms.invite()

建てる:

val appDependencies = Seq(
      javaCore,
    "com.google.inject" % "guice" % "3.0",    
  )
于 2013-02-28T10:18:16.180 に答える