小编o-0*_*o-0的帖子

如何使用使用playframework库的Scala独立应用程序

我有这个简单的测试Scala应用程序,它阻止http请求:

build.sbt

name := "hello"

version := "1.0"

scalaVersion := "2.11.2"

libraryDependencies += "com.typesafe.play" %% "play-ws" % "2.4.0-M1"
Run Code Online (Sandbox Code Playgroud)

Test.scala

import play.api.libs.json._
import play.api.libs.ws._
import scala.concurrent.duration.Duration
import scala.concurrent.{Await, Future}

object Test {
  def main(args: Array[String]) = {
    val wsClient = WS.client
    val body = getBody(wsClient.url("http://example.com/").get())
    println(s"body: $body")
  }

  def getBody(future: Future[WSResponse]) = {
    val response = Await.result(future, Duration.Inf);
    if (response.status != 200)
      throw new Exception(response.statusText);
    response.body
  }
}
Run Code Online (Sandbox Code Playgroud)

此应用程序失败:

Exception in thread "main" java.lang.RuntimeException: There is no started application
Run Code Online (Sandbox Code Playgroud)

如何解决这个问题?

scala playframework-2.0

9
推荐指数
2
解决办法
6819
查看次数

在Play Framework 2.6中使用JWT身份验证

我使用旧版本的指南使用JWT身份验证时遇到问题,但我想关注新的Play 2.6

根据官方文件,JWT现在在引擎盖下使用.

似乎有一种更简单的方法,而不是创建一个ActionBuilder和一堆其他类或导入第三方库,但我无法弄清楚我需要做什么.

谁能给我指导如何使用2.6创建JWT令牌/秘密?最好是Java,但我也可以通过Scala.

playframework jwt playframework-2.6

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

scala case 类默认参数

我在一些源代码中遇到了以下定义:

case class Task(uuid: String = java.util.UUID.randomUUID().toString, n: Int)
Run Code Online (Sandbox Code Playgroud)

这里第一个参数声明为默认值,但我不明白如何使用这个默认值创建实例。如果我不能像那样传递第一个参数,Task(1)那么我肯定会得到编译错误。

但是,以下更改工作正常:

case class Task(n: Int, uuid: String = java.util.UUID.randomUUID().toString)
Run Code Online (Sandbox Code Playgroud)

但是,正如定义中所示,这里uuid是第一个参数。

scala

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

Ktor路由:如何在应用程序/ api中分解路由功能?

我的问题是关于Ktor中路由功能背后的全局情况;设计具有大量路由的API时具有很高的可扩展性。

如果我创建这样的应用程序:

import io.ktor.application.*
import io.ktor.response.*
import io.ktor.request.*
import io.ktor.server.engine.embeddedServer
import io.ktor.server.netty.Netty

fun Application.routingExample() {
 intercept(ApplicationCallPipeline.Call){
   if (call.request.uri == "/") call.respondText("User call for /")
 }
}

fun main(args: Array<String>) {
    embeddedServer(Netty, 8080, watchPaths = listOf("Routing"), module = Application::routingExample).start()
}
Run Code Online (Sandbox Code Playgroud)

如果我的api / app路由数量少,那没关系。但是,我应该以哪种样式将这种方法扩展到大量路由(例如30条路由和控制器功能)。

我将有多种选择:

大型路由功能:我将拥有一个Application.routingExample可以容纳所有路由的大型功能,因此无需更新主路由。

一个大型的主要功能:将有一个大型功能,可以容纳对其他较小功能的调用;但这将是重复的;至于API,我想在同一端口中提供它们。

所以我的问题是关于编码风格的:有没有一种方法可以分解路由控制器的关系?

kotlin ktor

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