java - 我应该如何设计我的 Play2 java 应用程序以便符合 "Play2 thinking"

标签 java playframework-2.1

我正在使用 Java 构建一个 Play2 应用程序,它将接收几个电话号码并将其发布到发送 SMS 的休息服务。

我已经创建了一个 Controller ,我认为该 Controller 将处理请求,对 Java 列表执行解码。然后我正在考虑创建一个 SmsService 类来处理调用。我不明白的是我应该如何以 Play2 的方式实现这一点。

我是否在 Controller 中通过键入 new 来实例化 SmsService?或者我用 依赖注入(inject)?也许我被 Spring 的背景染色了,忘记一切 注入(inject)并在 Controller 中写入所有内容?也许使该方法静态 并使用SmsService,如SmsService.sendSms(numbers)

我已经检查了 Play2 2.1 文件夹后面的示例,但是那里的示例 不处理这种情况。我可能错过了文档中的一些内容。

您将如何做到这一点以及为什么?

短信 Controller :

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);
    }
}

最佳答案

自从我得到答案后,我就这样做了。

全局:

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();
    }
}

Controller :

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",    
  )

关于java - 我应该如何设计我的 Play2 java 应用程序以便符合 "Play2 thinking",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14891460/

相关文章:

Java 异常处理 Do 循环不起作用?

java 3d 对象的 Java 序列化错误

java - Wicket:刷新浏览器时不会加载对 HTML 或 Java 源的更改

java - Play 框架(Java)-Ebean : PersistenceException: No ScalarType registered

playframework-2.0 - 如何在 Play 2 中使用 http 线登录

java - 我是否应该设计一个包含领域事件的会计系统?

java - Windows 8 Maven 安装问题

json - 使用Play Framework JSON库自定义JodaTime序列化?

java - 如何在 play 2.1 Java 中为 WS.post() 设置参数

json - Play 2.1-RC2 : Read keys from JSON