我正在使用Slick与Play Framework 2.1,我有一些麻烦.
鉴于以下实体......
package models
import scala.slick.driver.PostgresDriver.simple._
case class Account(id: Option[Long], email: String, password: String)
object Accounts extends Table[Account]("account") {
def id = column[Long]("id", O.PrimaryKey, O.AutoInc)
def email = column[String]("email")
def password = column[String]("password")
def * = id.? ~ email ~ password <> (Account, Account.unapply _)
}
Run Code Online (Sandbox Code Playgroud)
...我必须为特定的数据库驱动程序导入一个包,但我想在生产中使用H2进行测试和PostgreSQL.我该怎么办?
我能够通过覆盖单元测试中的驱动程序设置来解决此问题:
package test
import org.specs2.mutable._
import play.api.test._
import play.api.test.Helpers._
import scala.slick.driver.H2Driver.simple._
import Database.threadLocalSession
import models.{Accounts, Account} …
Run Code Online (Sandbox Code Playgroud) 鉴于以下列举......
object MyEnum extends Enumeration {
type MyEnum = Value
val Val1 = Value("val1")
val Val2 = Value("val2")
val ValN = Value("valN")
implicit val myEnumFormat = new Format[MyEnum] {
def reads(json: JsValue) = MyEnum.withName(json.as[String].value) // doesn't compile
def writes(myEnum: MyEnum) = JsString(myEnum.toString)
}
}
Run Code Online (Sandbox Code Playgroud)
...我需要将它序列化/反序列化为JSON.myEnumFormat
不编译,我总是收到以下错误消息:
type mismatch;
[error] found : models.MyEnum.Value
[error] required: play.api.libs.json.JsResult[models.MyEnumValue]
[error] Note: implicit value myEnumFormat is not applicable here because it comes after the application point and it lacks an explicit result type
[error] …
Run Code Online (Sandbox Code Playgroud) 是否存在JWT的Scala实现或者至少是Play的一个示例?发布此问题后,我在互联网上进一步搜索并找到了JWT的一些介绍.任何建议都会非常感激.
我正在编写一个带有注册按钮的HTML页面,该按钮应该无需打开本地邮件客户端即可静默发送电子邮件.这是我的HTML:
<form method="post" action="">
<input type="text" id="email_address" name="name" placeholder="Enter your email address..." required>
<button onclick="sendMail(); return false">Send Email</button>
</form>
Run Code Online (Sandbox Code Playgroud)
...这是我的JavaScript代码:
<script type="text/javascript">
function sendMail() {
var link = 'mailto:hello@domain.com?subject=Message from '
+document.getElementById('email_address').value
+'&body='+document.getElementById('email_address').value;
window.location.href = link;
}
</script>
Run Code Online (Sandbox Code Playgroud)
上面的代码有效...但它会打开本地电子邮件客户端.如果我删除属性中的return
语句,onclick
如下所示:
<form method="post" action="">
<input type="text" id="email_address" name="name" placeholder="Enter your email address..." required>
<button onclick="sendMail()">Send Email</button>
</form>
Run Code Online (Sandbox Code Playgroud)
...然后根本不发送电子邮件.我错过了什么吗?
任何帮助将得到真诚的赞赏:-)
下面是一个案例类,用于验证name
参数既不null
是空的也不是空的:
case class MyClass(name: String) {
require(Option(name).map(!_.isEmpty) == Option(true), "name is null or empty")
}
Run Code Online (Sandbox Code Playgroud)
正如所料,传递null
或空字符串name
导致IllegalArgumentException
.
是否有可能重写验证以获得Success
或Failure
代替抛出IllegalArgumentException
根据这一文件,该public/
目录应包含能够原样送达静态资产,而可选app/assets
目录应包含需要被处理,例如,通过缩小编译器在编译期的任何资产.
如果是SPA(单页应用程序),资产将包括JavaScript,CSS和图像文件......这是否意味着图像文件应存储在public/images
JavaScript和CSS文件中app/assets/
?
然后,我还需要集成第三方模块,该模块由缩小的JavaScript库和需要自定义的非缩小JavaScript文件组成......我该如何管理?我应该保留标准的,已经缩小的资产public/
并将自定义的JavaScript文件移动到app/assets/javascripts/
?
我正在尝试将一些案例类序列化/反序列化为Json ...而且在处理只有一个字段的案例类时我遇到了麻烦(我正在使用Play 2.1):
import play.api.libs.json._
import play.api.libs.functional.syntax._
case class MyType(type: String)
object MyType {
implicit val myTypeJsonWrite = new Writes[MyType] {
def writes(type: MyType): JsValue = {
Json.obj(
"type" -> MyType.type
)
}
}
implicit val myTypeJsonRead = (
(__ \ 'type).read[String]
)(MyType.apply _)
}
Run Code Online (Sandbox Code Playgroud)
上面的代码总是生成以下错误消息:
[error] /home/j3d/Projects/test/app/models/MyType.scala:34: overloaded method value read with alternatives:
[error] (t: String)play.api.libs.json.Reads[String] <and>
[error] (implicit r: play.api.libs.json.Reads[String])play.api.libs.json.Reads[String]
[error] cannot be applied to (String => models.MyType)
[error] (__ \ 'method).read[String]
[error] ^
Run Code Online (Sandbox Code Playgroud)
我知道...包含只是一个字符串没有多大意义的情况下,类...但我需要序列化/反序列化的情况下,类非常相似,我上面描述的来自外部库中的一个.
任何的想法?我错过了什么吗?任何帮助将非常感激...我变得疯狂:-(谢谢.
我知道在Scala中一个方法永远不会返回null
...但是输入参数是什么?给出以下代码片段...
object MyObject {
def myMethod(p: String): Option[String] = {
if (p == null) throw new IllegalArgumentException("p is null.")
...
}
}
Run Code Online (Sandbox Code Playgroud)
......我检查的方式是否p
正确?有什么建议吗?
以下是创建帐户的课程:
class Account private(private var json: JsValue) {
private def setValue(key: JsPath, value: JsValue) = {
value match {
case JsNull => json.transform(key.json.prune).map(t => json = t)
case _ => json.transform((__.json.update(key.json.put(value)))).map(t => json = t)
}
}
def asJson = json
def id_= (v: Option[String]) = setValue((__ \ 'id), Json.toJson(v))
def id = json as (__ \ 'id).readNullable[String]
def name = json as (__ \ 'name).read[String]
def name_= (v: String) = setValue((__ \ 'name), Json.toJson(v))
def ownerId = json as …
Run Code Online (Sandbox Code Playgroud) 我在MongoDB中有以下文档......
{
"_id" : ObjectId("531221cd960100960116b992"),
"username : "joe",
"address" : [
{
"zip" : "8000",
"city" : "Zurich"
},
{
"zip" : "6900",
"city" : "Lugano"
}
]
}
Run Code Online (Sandbox Code Playgroud)
...并检索第二个地址我使用以下语句:
db.users.find({ _id: ObjectId("531221cd960100960116b992") }, { addresses: { $slice: [0, 1] } } )
Run Code Online (Sandbox Code Playgroud)
这工作除了它还返回对象ID:
{ "addresses" : [ { "zip" : "6900", "city" : "Lugano" } ], "_id" : ObjectId("531221cd960100960116b992") }
Run Code Online (Sandbox Code Playgroud)
如何防止MongoDB返回对象ID?我知道我应该提供一个类似的投影_id : 0
......但我应该把它放在上面的表达式中?我做了很多尝试......但没有成功.
谢谢.