小编Nic*_*ick的帖子

在Play Framework 2.5中使用抽象类和对象进行依赖注入

我正在尝试从Play 2.4迁移到2.5,避免弃用.

我有一个abstract class Microservice从中创建了一些对象.Microservice该类的某些函数用于play.api.libs.ws.WS发出HTTP请求以及play.Play.application.configuration读取配置.

以前,我需要的只是一些进口,如:

import play.api.libs.ws._
import play.api.Play.current
import play.api.libs.concurrent.Execution.Implicits.defaultContext
Run Code Online (Sandbox Code Playgroud)

但是现在你应该使用依赖注入来使用WS,也可以使用访问当前的Play应用程序.

我有类似的东西(缩短):

abstract class Microservice(serviceName: String) {
    // ...
    protected lazy val serviceURL: String = play.Play.application.configuration.getString(s"microservice.$serviceName.url")
    // ...and functions using WS.url()...
}
Run Code Online (Sandbox Code Playgroud)

对象看起来像这样(缩短):

object HelloWorldService extends Microservice("helloWorld") {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,我不明白如何将所有的东西(WS,配置,ExecutionContect)放到抽象类中以使其工作.

我试着把它改成:

abstract class Microservice @Inject() (serviceName: String, ws: WSClient, configuration: play.api.Configuration)(implicit context: scala.concurrent.ExecutionContext) {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

但这并没有解决问题,因为现在我也要改变对象,我无法弄清楚如何.

我试图把它object变成一个@Singleton class …

scala playframework playframework-2.5

17
推荐指数
1
解决办法
5795
查看次数

Play Framework 2.3(Scala)中的自定义JSON验证约束

我设法用自定义约束实现表单验证,但现在我想用JSON数据做同样的事情.

如何将自定义验证规则应用于JSON解析器?

示例:客户端的POST请求包含用户名(username),我不仅要确保此参数是非空文本,还要确保此用户实际存在于数据库中.

// In the controller...

def postNew = Action { implicit request =>
    request.body.asJson.map { json =>
        json.validate[ExampleCaseClass] match {
            case success: JsSuccess[ExampleCaseClass] =>
                val obj: ExampleCaseClass = success.get
                // ...do something with obj...
                Ok("ok")
            case error: JsError =>
                BadRequest(JsError.toFlatJson(error))
        }
    } getOrElse(BadRequest(Json.obj("msg" -> "JSON request expected")))
}


// In ExampleCaseClass.scala...

case class ExampleCaseClass(username: String, somethingElse: String)

object ExampleCaseClass {
    // That's what I would use for a form:
    val userCheck: Mapping[String] = nonEmptyText.verifying(userExistsConstraint)

    implicit val …
Run Code Online (Sandbox Code Playgroud)

validation json scala playframework-2.3 playframework-json

12
推荐指数
1
解决办法
5526
查看次数

与“applinks:”关联的域在开发中不起作用

我正在尝试在 iOS 14 的未发布应用程序中设置关联域。我尽可能遵循文档。我正在使用本地开发网络服务器以及模拟器和真实 iPhone 中的应用程序本身进行本地测试。

不仅链接无法在我的应用程序中打开,应用程序甚至不会尝试https://mycomputer.local/.well-known/apple-app-site-association从本地 Web 服务器请求文件(我让 Web 服务器在请求时打印一条调试消息,但仅当我手动加载时才会打印该消息)来自网络浏览器)。

这是我已经完成/检查过的事情的列表:

  • Xcode 12.2:
    • 在“签名和功能”下添加了关联域
    • 添加到域:(applinks:mycomputer.local?mode=developer我也尝试过IP地址)
    • 我禁用了自动管理签名,而是在https://developer.apple.com/account/resources/profiles/list上创建了一个配置文件(类型Development,平台iOS,它具有关联域以及其他启用的功能,并且链接到我的应用程序包ID)并选择该配置文件进行调试构建。
  • 我确保可以https://mycomputer.local/.well-known/apple-app-site-association从所有涉及的设备访问该 URL,即我的计算机、模拟器中的 Safari、真实 iPhone 上的 Safari(所有设备都连接到本地网络并成功显示我的 JSON 文件)。

截屏: 在此输入图像描述

如上所述,我几乎可以排除问题在于 JSON 文件本身,因为我可以证明设备甚至没有访问它。我是否遗漏了什么或误解了这个概念?

ios

6
推荐指数
1
解决办法
2027
查看次数

如何在长时间运行的循环中更新Cocoa中的进度条?

我有一个while循环,运行了很多秒,这就是为什么我想在该过程中更新进度条(NSProgressIndicator),但它只在循环完成后更新一次.顺便说一下,如果我想要更新标签文本,也会发生同样的情况.

我相信,我的循环会阻止该应用程序的其他事情发生.必须有另一种技术.这与线程有什么关系吗?我是在正确的轨道上吗?有人可以给我一个简单的例子,如何"优化"我的应用程序?

我的应用程序是一个Cocoa应用程序(Xcode 3.2.1),我的这两种方法Example_AppDelegate.m:

// This method runs when a start button is clicked.
- (IBAction)startIt:(id)sender {
    [progressbar setDoubleValue:0.0];
    [progressbar startAnimation:sender];
    running = YES; // this is a instance variable

    int i = 0;
    while (running) {
        if (i++ >= processAmount) { // processAmount is something like 1000000
            running = NO;
            continue;
        }

        // Update progress bar
        double progr = (double)i / (double)processAmount;
        NSLog(@"progr: %f", progr); // Logs values between 0.0 and 1.0
        [progressbar setDoubleValue:progr];
        [progressbar …

macos cocoa objective-c

5
推荐指数
1
解决办法
2万
查看次数

如何在ReactiveMongo模型中表示GeoJSON点?

为了做到空间查询MongoDB中的文档与位置(有2d2dsphere地理空间指数)应该是这个样子:

{
    _id: …,
    loc: {
        type: "Point",
        coordinates: [ <longitude>, <latitude> ]
    }
}
Run Code Online (Sandbox Code Playgroud)

我是Scala,ReactiveMongo和Play Framework的新手,但在我看来,使用这样一个位置的一个明显方法是通过一个案例类:

case class Point(lon: Double, lat: Double)
Run Code Online (Sandbox Code Playgroud)

网站的API处理的JSON表示应该类似于:

{
    _id: …
    loc: [ <longitude>, <latitude> ]
}
Run Code Online (Sandbox Code Playgroud)

现在,我无法弄清楚如何告诉我的ReactiveMongo模型在这些格式之间进行序列化/反序列化.

我的控制器看起来像这样:

package controllers

import play.api._
import play.api.mvc._
import play.api.libs.json._
import scala.concurrent.Future

// Reactive Mongo imports
import reactivemongo.api._
import scala.concurrent.ExecutionContext.Implicits.global

// Reactive Mongo plugin
import play.modules.reactivemongo.MongoController
import play.modules.reactivemongo.json.collection.JSONCollection

object Application extends Controller with MongoController {
    def collection: JSONCollection = db.collection[JSONCollection]("test")

    import play.api.data.Form
    import …
Run Code Online (Sandbox Code Playgroud)

scala mongodb playframework reactivemongo playframework-2.2

4
推荐指数
1
解决办法
1292
查看次数