我正在使用Java构建一个Play2应用程序,它将接收几个电话号码,并将其发布到发送短消息的rest服务中。
我已经创建了一个Controller,并且我认为控制器将处理请求,执行对Java列表的解编组。然后,我考虑创建一个SmsService类来处理调用。我无法理解的是,我应该如何以Play2的方式实现这一点。
在Controller中,我是否通过键入new来实例化SmsService?还是使用依赖注入?也许我要用我的Spring背景来着色,忘掉注入,把所有的东西都写在控制器中?可以使方法静态,并使用类似于SmsService的SmsService.sendSms(数字)
我已经检查了Play2的2.1文件夹后面的示例,但是那里的示例没有处理这种情况。我可能在文档中漏掉了什么东西。
你会怎么做?为什么?
短消息控制器:
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);
}
}
发布于 2013-02-28 10:18:16
既然我现在得到答案,我就这样做了。
全球:
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",
)
https://stackoverflow.com/questions/14891460
复制相似问题