我需要在应用程序启动时安排一个重复的任务,任务本身非常简单,只需向应用程序发送一个即发即弃的HTTP调用.我不是一个游戏高手,买我会假设是s简单的解决方案会是这样的使用play.api.libs.concurrent.Akka.system.schedule在Global.onStart.从Play 2.4开始,Global配置有点弃用,有利于新的Guice DI.黑客从DI文档中获取建议我无法为这个问题找到一个很好的解决方案.我设法得到的最好的是在GuiceApplicationLoader调用自定义实现之上编写一个包装器BuiltInComponentsFromContext,但在这种情况下我不能使用注入来获取WSClient.使用Play 2.4重写类似内容的最佳方法是什么:
object Global extends GlobalSettings {
override def onStart(app: Application) = {
Akka.system.schedule(2.hours, 2.hours, theTask)
}
}
Run Code Online (Sandbox Code Playgroud) 我试图使用一个Abstract类Employee,它有两个子类,HourlyEmployee和AnnualEmployee.在Employee课堂上我有一个抽象的方法:
public abstract class Employee{
public abstract double computePay();
}
Run Code Online (Sandbox Code Playgroud)
public class HourlyEmployee extends Employee{
public double computePay(double rate, double hours){
double monthlySalary;
monthlySalary = ((rate * hours) * 52) / 12;
return monthlySalary;
}
}
Run Code Online (Sandbox Code Playgroud)
public class AnnualEmployee extends Employee{
public double computePay(double salary){
double monthlySalary;
monthlySalary = salary / 12;
return monthlySalary;
}
}
Run Code Online (Sandbox Code Playgroud)
错误说没有HourlyEmployee,也不AnnualEmployee是抽象的,因此不能重写抽象方法computePay()在Employee.
我不明白为什么我不能为这种方法提供两个不同的参数.由于我无法做到这一点,我该如何解决这个问题呢?
我正在使用scala play 2.5,并且在尝试在我的一个控制器中注入对象时出现以下错误.我正在使用Guice提供的默认注入框架.
ProvisionException: Unable to provision, see the following errors:
1) No implementation for services.MyService was bound.
while locating services.MyService for parameter 0 at controllers.MyController.<init>(MyController.scala:12)
while locating controllers.MyController for parameter 3 at router.Routes.<init>(Routes.scala:55)
while locating router.Routes
while locating play.api.inject.RoutesProvider while locating play.api.routing.Router for parameter 0 at play.api.http.JavaCompatibleHttpRequestHandler.<init>(HttpRequestHandler.scala:200)
while locating play.api.http.JavaCompatibleHttpRequestHandler
while locating play.api.http.HttpRequestHandler for parameter 4 at play.api.DefaultApplication.<init>(Application.scala:221) at play.api.DefaultApplication.class(Application.scala:221)
while locating play.api.DefaultApplication
while locating play.api.Application
Run Code Online (Sandbox Code Playgroud)
这是控制器:
package controllers
import services.MyService
class MyController @Inject()(myService: MyService, val messagesApi: MessagesApi) extends …Run Code Online (Sandbox Code Playgroud) 我知道如何使用Java库,我可以编写一些循环来完成我需要的东西,但问题是更多,为什么没有内容scala.collection.JavaConverters或scala.collection.JavaConverstions将a转换java.util.stream.Stream为scala.collection.immutable.Stream?
我想做这样的事情:
def streamFiles(path: Path): Stream[Path] = {
Files.newDirectoryStream(path).asScala
}
Run Code Online (Sandbox Code Playgroud)
但相反,我必须写这样的东西:
def streamFiles(path: Path): Stream[Path] = {
val path_it : java.util.Iterator[Path] = Files.newDirectoryStream(path).iterator()
def loop(it: java.util.Iterator[Path]): Stream[Path] =
if( it.hasNext )
it.next #:: loop(it)
else
Stream()
loop(path_it)
}
Run Code Online (Sandbox Code Playgroud) 我正在寻找一种对我的Play框架应用进行身份验证的方法:我希望允许/禁止对未经身份验证的用户进行整体访问
是否有一些适用的模块/解决方案?我不需要任何形式的身份验证,只需要未经身份验证的用户的401 HTTP响应即可(例如Apache .htacccess“ AuthType Basic”模式)。
我的目的是生成一个可读的HTML测试报告,该报告将捕获功能测试引发的功能/场景.我正在使用FeatureSpec我的测试.(然后我可以将此报告显示给我的产品团队以获得他们的验收批准).
我在Play控制台上尝试了以下选项:
test-only -h target/html-report MySpecFile
Run Code Online (Sandbox Code Playgroud)
这个生成了一堆js和css文件,但我没有看到一个html文件.
我也尝试在我的sbt文件中添加这个:
testOptions in Test += Tests.Argument(TestFrameworks.ScalaTest, "-u", "target/test-reports")
Run Code Online (Sandbox Code Playgroud)
这只会生成一个xml文件.
非常感谢您的帮助.我用Google搜索了答案,但到目前为止未能获得有效的解决方案.
我有一个包含许多字段的 Person 对象列表,我可以轻松地执行以下操作:
list.map(person => person.getName)
Run Code Online (Sandbox Code Playgroud)
为了生成另一个包含所有人民姓名的集合。
如何使用 map 函数创建一个包含 Person 类的所有字段(但不包含其名称)的新集合?
换句话说,如何从给定集合中创建一个新集合,该集合将包含初始集合的所有元素,并删除其中的一些字段?
我无法理解 PlayFramework(版本 2.5)中的授权概念。我的情况是我有一个 REST API 方法getUser,我想通过使用名为 的自定义请求标头中的令牌执行授权来限制其访问"X-Authorization"。现在我的控制器代码如下所示:
package controllers;
import models.User;
import org.bson.types.ObjectId;
import play.mvc.*;
import org.json.simple.*;
import views.html.*;
public class ApiController extends Controller {
public Result getUser(String userId) {
User user = User.findById(new ObjectId(userId));
JSONObject userG = new JSONObject();
//Some code to append data to userG before return
return ok(userG.toJSONString());
}
}
Run Code Online (Sandbox Code Playgroud)
路由 URL 定义如下:
GET /api/user/:id controllers.ApiController.getUser(id)
Run Code Online (Sandbox Code Playgroud)
选项 1可能是检查方法内的授权令牌getUser,并检查其他凭据,但我想在调用getUser方法之前限制访问。将来我将向此 REST API 添加更多方法调用。因此,我也将对未来的 REST API 重复使用相同的授权。
我发现 Play Framework 中有可用的 …
java authentication playframework deadbolt-2 playframework-2.5
我怎样才能将一个json对象数组解析为scala List或Array?
现在我有一个解析单个对象的代码:
{"id":1,"name":"example1"}
Run Code Online (Sandbox Code Playgroud)
这是代码:
def exampleAction = Action.async(parse.json) { implicit request =>
for {
id <- (request.body \ "id").asOpt[Int]
name <- (request.body \ "name").asOpt[String]
} yield {
(exampleService.create(Example(id, name)) map { n => Created("Id of Object Added : " + n) }).recoverWith {
case e => Future {
InternalServerError("There was an error at the server")
}
}
}.getOrElse(Future { BadRequest("Wrong json format") })
}
Run Code Online (Sandbox Code Playgroud)
但是我应该如何更改它以解析像这样的json请求:
{[{"id":1,"name":"example1"},{"id":2,"name":"example2"}]}
Run Code Online (Sandbox Code Playgroud)
我想功能map应该在某个地方使用.
如果我使用form帮助程序loginForm在我的站点上获取 a ,我该如何自定义输入标签?当然,设置的标签是我的Java类中变量的名称。但是,我想要另一个标签名称而不是变量名称。
在这一点上,我发现改变它的唯一方法是设置一个全新的表单构建器。在此,我看看我要说明的元素是否是我要设置新标签然后设置另一个标签的元素。然而,我认为这太过分了。
我可以在@helper.input语句末尾添加一个简单的变量来更改标签名称吗?
我正在使用 PlayFramework 2.6。