2013-02-15 26 views
1

我正在用Java構建Play2應用程序,該應用程序將接收幾個電話號碼並將其發送到發送SMS的其餘服務。我應該如何設計我的Play2 Java應用程序,以便符合「Play2思考」

我已經創建了一個控制器,我在想,控制器將處理請求,執行解組到Java列表。然後我想創建一個SmsService類來處理調用。我無法理解的是我應該如何以Play2的方式實現這一點。

我是否在控制器中通過輸入new來實例化SmsService?或者我使用 依賴注入?也許我要在我的春天背景上着色,忘記所有關於 注入並在控制器中寫入所有內容?也許使該方法靜態 和使用SmsService像SmsService.sendSms(數字)

我已檢查與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); 
    } 
} 

回答

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",  
) 
相關問題