小编sch*_*hub的帖子

如何在Play Framework 2.x中实现嵌入对象的隐式Json Writes

有两个班级FooBar.Foo包含一个字段Bar.问题是,如何Writes为类实现隐式json Foo

这是代码:

package models

import play.api.libs.json._

case class Foo(id: String, bar: Bar)

object Foo {
  implicit val implicitFooWrites = new Writes[Foo] {
    def writes(foo: Foo): JsValue = {
      Json.obj(
        "id" -> foo.id,
        "bar" -> foo.bar
      )
    }
  }
}

case class Bar(x: String, y: Int)

object Bar {
  implicit val implicitBarWrites = new Writes[Bar] {
    def writes(bar: Bar): JsValue = {
      Json.obj(
        "x" -> bar.x,
        "y" -> bar.y …
Run Code Online (Sandbox Code Playgroud)

json scala playframework playframework-2.0

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

如何在play-framework中运行测试时应用play-evolutions?

使用play框架运行测试时,我遇到了进化问题

  • 用于scala的playframework v2.6.6
  • play-slick v3.0.2
  • play-slick-evolutions v3.0.2

测试看起来像这样:

class TestFooController extends PlaySpec with GuiceOneServerPerSuite {
  "foo endpoint should store some data" in {
    val wsClient = app.injector.instanceOf[WSClient]
    val url = s"http://localhost:$port/foo"
    val requestData = Json.obj("foo" -> "bar")
    val response = await(wsClient.url(url).post(requestData))
    response.status mustBe OK
  }
}
Run Code Online (Sandbox Code Playgroud)

数据库配置如下所示:

slick.dbs.default.driver="slick.driver.H2Driver$"
slick.dbs.default.db.driver="org.h2.Driver"
slick.dbs.default.db.url="jdbc:h2:mem:play"
Run Code Online (Sandbox Code Playgroud)

假设有一个创建表的进化脚本,foos这个脚本在开发模式下工作正常.

运行测试时,抛出以下错误:

play.api.http.HttpErrorHandlerExceptions$$anon$1: Execution exception[[JdbcSQLException: Table "foos" not found;

foos无法找到该表,因此我假设尚未应用数据库演变.

然后我将数据库配置更改为在开发模式下使用的postgresql.

slick.dbs.default.driver = "slick.driver.PostgresDriver$"
slick.dbs.default.db.driver = "org.postgresql.Driver"
slick.dbs.default.db.url = "jdbc:postgresql://localhost:5432/foo-test"
slick.dbs.default.db.user = "user"
slick.dbs.default.db.password = "password"
Run Code Online (Sandbox Code Playgroud)

使用此配置,测试工作正常,数据存储在数据库中,因此数据库演进运行得很好. …

scala playframework playframework-evolutions play-slick playframework-2.6

9
推荐指数
1
解决办法
855
查看次数

Play 2:如何在Scala控制器中解析表单输入的动态列表?

我有一个表单,其中输入字段的数量是动态的.

如何使用播放表单映射这些输入字段?假设每个输入标记的名称是'foo_x',其中x是一个整数,每当在客户端动态创建新的输入字段时,该整数就会递增.Play中是否有自动映射可用,或者我必须"手动"执行此操作,如果是这样,如何执行此操作?

scala playframework playframework-2.0

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

Openlayer 3 - 检查功能是否在范围的范围内

我有一个功能列表和一个矢量图层,我需要知道,每个功能是否在地图视图的范围内.

我正在使用openlayers v3.9.0,并且在相应的文档中有一个函数containsExtent()(链接),它接受一个扩展并返回一个布尔值.似乎正是我正在寻找的功能.但是抛出一个错误,说containsExtent不是一个函数.

Uncaught TypeError: extent.containsExtent is not a function

代码段:

// someVectorSource is of type ol.source.Vector
// allMyFeatures is an array of features of type ol.Feature

var extent = someVectorSource.getExtent();
_.each(allMyFeatures, function(feature) {
  if (extent.containsExtent(feature.getGeometry().getExtent())) {
    // do something
  }
});
Run Code Online (Sandbox Code Playgroud)

这里有什么问题?

如果这是一种更好的方法,那么只需要在一次调用中获取范围内的那些特征而不迭代列表,就会更好.

openlayers-3

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

无法向Play会话添加元素

我试图在播放会话中添加一个简单的字符串,但它不起作用.为了测试,我写了一个小控制器函数,首先在会话中添加一个字符串,然后打印会话包含的所有元素,但它总是为空.

def foo = Action { request =>
  request.session + ("token", "foobar")
  request.session.data.foreach{ keyVal => println("\tkey value pair: " + keyVal._1 + ", " + keyVal._2)}
  Ok("just a test")
}
Run Code Online (Sandbox Code Playgroud)

我做错了什么?我需要通过application.conf或其他东西激活一些东西吗?

scala playframework playframework-2.0

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