首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我应该如何设计我的Play2 java应用程序以符合"Play2思想“

我应该如何设计我的Play2 java应用程序以符合"Play2思想“
EN

Stack Overflow用户
提问于 2013-02-15 09:20:20
回答 1查看 106关注 0票数 1

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

我已经创建了一个Controller,并且我认为控制器将处理请求,执行对Java列表的解编组。然后,我考虑创建一个SmsService类来处理调用。我无法理解的是,我应该如何以Play2的方式实现这一点。

在Controller中,我是否通过键入new来实例化SmsService?还是使用依赖注入?也许我要用我的Spring背景来着色,忘掉注入,把所有的东西都写在控制器中?可以使方法静态,并使用类似于SmsService的SmsService.sendSms(数字)

我已经检查了Play2的2.1文件夹后面的示例,但是那里的示例没有处理这种情况。我可能在文档中漏掉了什么东西。

你会怎么做?为什么?

短消息控制器:

代码语言:javascript
运行
复制
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);
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-28 10:18:16

既然我现在得到答案,我就这样做了。

全球:

代码语言:javascript
运行
复制
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();
    }
}

主计长:

代码语言:javascript
运行
复制
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);
    }
}

路线:

代码语言:javascript
运行
复制
GET /sms/invite    @controllers.Sms.invite()

内部版本:

代码语言:javascript
运行
复制
val appDependencies = Seq(
      javaCore,
    "com.google.inject" % "guice" % "3.0",    
  )
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14891460

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档