我在Play 2.3中有以下JSON阅读器:
import play.api.libs.json._
import play.api.libs.json.Reads._
val airportSearchReads: Reads[String] = (JsPath \ "search").read[String](minLength(3))
Run Code Online (Sandbox Code Playgroud)
并且编译器给了我错误
diverging implicit expansion for type play.api.libs.json.Reads[M]
starting with method ArrayReads in trait DefaultReads
Run Code Online (Sandbox Code Playgroud)
如果我使用implicit val我得到的
ambiguous implicit values:
both value uuidReads in trait DefaultReads of type => play.api.libs.json.Reads[java.util.UUID]
and value airportSearchReads in object AirportSearch of type => play.api.libs.json.Reads[String]
match expected type play.api.libs.json.Reads[M]
Run Code Online (Sandbox Code Playgroud)
我如何让它工作?
json scala playframework playframework-2.0 playframework-json
(提供的示例项目)我无法让sbt-concat按照设计来查找和连接由可能从预处理器任务生成的样式产生的样式表.在我的生产应用程序中,我正在尝试使用它来捆绑来自sbt-sass的精选缩小的输出文件.它在该项目的复杂设置中不起作用,因此我创建了一个示例项目,看看我是否可以让它工作.它在示例项目中也不起作用.这是一个测试项目build.sbt,尝试创建几个包,几乎所有我能想到的可能性,只是为了看看它们是否有效(公共Github repo,你应该能够克隆并立即复制问题):
import com.typesafe.sbt.web.Import.WebKeys._
import com.typesafe.sbt.web.pipeline.Pipeline
name := """sbt-concat-test"""
version := "1.0-SNAPSHOT"
lazy val root = (project in file(".")).enablePlugins(PlayScala, SbtWeb)
scalaVersion := "2.11.1"
libraryDependencies ++= Seq(
jdbc,
anorm,
cache,
ws
)
resolvers += Resolver.sonatypeRepo("releases")
includeFilter in (Assets, LessKeys.less) := "*.less"
excludeFilter in (Assets, LessKeys.less) := "_*.less"
val myPipelineTask = taskKey[Pipeline.Stage]("Some pipeline task")
myPipelineTask := { mappings => println(mappings); mappings }
pipelineStages := Seq(myPipelineTask, concat)
Concat.groups := Seq(
"style-group1.css" -> group(sourceDirectory.value ** "*.css"), …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用一个类作为单个接口聚合一堆API函数的代理.其中一些是nullary函数,但我不希望将它们包含在类构造函数中以触发API调用.我现在的解决方案是将调用包装在一个文字的nullary函数中new myClass(() => apiCall),然后显式调用成员函数.这并不是那么糟糕,但我想知道是否有技术原因我不能只使用call-by-name参数来传递对方法的延迟引用?
例:
scala> class MyClass(val apiCall: => String)
<console>:1: error: `val' parameters may not be call-by-name
class MyClass(val apiCall: => String)
Run Code Online (Sandbox Code Playgroud)
编辑我应该指定我的问题是为什么类不能有val参数.添加了一个示例.
我定义了以下读取:
import org.joda.time.DateTime;
implicit val userInfoRead: Reads[UserInfo] = (
(JsPath \ "userName").readNullable[String] and
] (JsPath \ "startDate").readNullable[DateTime]
(UserInfo.apply _)
Run Code Online (Sandbox Code Playgroud)
传递以下JSON对象:
"userInfo" : {
"userName": "joeuser",
"startDate": "2006-02-28"
}
Run Code Online (Sandbox Code Playgroud)
当我验证此数据时,出现以下错误:
(/startDate,List(ValidationError(validate.error.expected.jodadate.format,WrappedArray(yyyy-MM-dd))))))
Run Code Online (Sandbox Code Playgroud)
关于格式化中我缺少的任何建议吗?
我想使用这个插件
addSbtPlugin("net.ground5hark.sbt"%"sbt-concat"%"0.1.8")
连接我的资产.
我有3组:
Concat.groups := Seq(
"concat_main.css" -> group(Seq(
"stylesheets/bootstrap.min.css",
"stylesheets/font-awesome.css",
"stylesheets/totem/sidebar/component.css",
"stylesheets/main.min.css"
)),
"concat_main.js" -> group(Seq(
"javascripts/jquery-2.1.0.min.js",
"javascripts/bootstrap.min.js",
"javascripts/totemPage/sidebar/modernizr.custom.js",
"javascripts/totemPage/respond.min.js",
"javascripts/totemPage/html5shiv.js",
"javascripts/totemPage/sidebar/classie.js",
"javascripts/main.js"
)),
"concat_noel.js" -> group(Seq(
"javascripts/totemPage/ouibounce-modal.js",
"javascripts/ouibounce_modal.js",
"javascripts/homePage.js",
"javascripts/totemPage/jquery.cookie.js",
"javascripts/embed.js"
))
)
Concat.parentDir := "public/main/javascripts"
pipelineStages in Assets := Seq(concat, uglify, digest, gzip)
Run Code Online (Sandbox Code Playgroud)
文件是在dev中生成的,我可以访问
<link rel="stylesheet" href="@routes.Assets.versioned("javascripts/concat_main.css")">
<script src="@routes.Assets.versioned("javascripts/concat_main.js")" type="text/javascript"></script>
Run Code Online (Sandbox Code Playgroud)
但是activator start我有一个404.
我正在玩Play!斯卡拉2.2和我有渲染的一个问题class在Json:
我有两个类,一个依赖于另一个,如下所示:
case class Artist(id: String, cover: String, website: List[String], link: String, Tracks: List[Track] = List())
case class Track(stream_url: String, title: String, artwork_url: Option[String] )
Run Code Online (Sandbox Code Playgroud)
他们隐含的作家:
implicit val artistWrites: Writes[Artist] = Json.writes[Artist]
implicit val trackWrites: Writes[Track] = Json.writes[Track]
Run Code Online (Sandbox Code Playgroud)
作者的工作如下:
println(Json.toJson(Track("aaa", "aaa", Some("aaa"))))
println(Json.toJson(Artist("aaa", "aaa", List("aaa"), "aaa", List())))
Run Code Online (Sandbox Code Playgroud)
即如果Artist有一个空的 list of tracks.但如果我想这样做:
println(Json.toJson(Artist("aaa", "aaa", List("aaa"), "aaa", List(SoundCloudTrack("ljkjk", "ljklkj", Some("lkjljk"))))))
Run Code Online (Sandbox Code Playgroud)
我得到一个execution exception:[NullPointerException: null]
你能解释一下我做错了什么吗?谢谢 ;)
我正在尝试为类型Map [Int,Long]写一个json读取组合器
到目前为止我有这个:
implicit val mapWrites = Json.writes[Map[Int, Long]]
implicit val mapReads: Reads[Map[Int, Long]] = (
// ???
) // ?
Run Code Online (Sandbox Code Playgroud)
我不确定这是如何工作的,我尝试做(Map [Int,Long] .apply但是apply方法不可用.
寻找一些帮助来编写这个Reads组合器.
我正在开发一个Play库,它可以插入构建过程和应用程序代码.我希望从应用程序集中配置库,application.conf构建时和运行时部分都需要访问该配置.在运行时,这没有问题; 我像往常一样定义reference.conf任何默认值并使用ConfigFactory.load.
但是,我不确定什么是构建时间最好的.我在SBT任务中使用以下内容:
import com.typesafe.config.ConfigFactory
val baseDir = baseDirectory.value
val config = ConfigFactory.parseFile(baseDir / "conf/application.conf")
Run Code Online (Sandbox Code Playgroud)
,因为ConfigFactory.load似乎在构建时不起作用.但这让我感觉很糟糕,因为它绕过了正常的逻辑load.有这样做的首选方式吗?
我正在使用play.api.libs.json._库.我有这种Scala类.我需要以Json格式读/写这个类.因为Timestamp没有隐式的读/写器.我必须提供自己的.不幸的是,我尝试了几种方式.你能告诉我它是怎么做的吗?提前致谢!
case class Event(id: Long, startTime: Option[java.sql.Timestamp] = None, endTime: Option[java.sql.Timestamp] = None)
Run Code Online (Sandbox Code Playgroud)
我想按照Json格式POST/GET
{
"id": 1,
"startTime": "2011-10-02 18:48:05.123456",
"endTime": "2011-10-02 20:48:05.123456"
}
Run Code Online (Sandbox Code Playgroud) 我试图将上游的变化拉到我的前叉.我试过了git fetch https://github.com/someuser/someproject,但它固执地拒绝做任何事情.它只是说了一些完全神秘而没有做的事情,即:
From https://github.com/someuser/someproject
* branch HEAD -> FETCH_HEAD
Run Code Online (Sandbox Code Playgroud)
但是当我将URL添加为命名远程时,事情发生了变化:
> git remote add upstream https://github.com/someuser/someproject.git
> git fetch upstream
remote: Counting objects: 340, done.
remote: Compressing objects: 100% (268/268), done.
remote: Total 340 (delta 145), reused 18 (delta 16), pack-reused 44
... etc ...
Run Code Online (Sandbox Code Playgroud)
那有什么区别?为什么在没有先添加遥控器的情况下指定遥控器时什么都不做?当我尝试从URL中获取时,它到底告诉我的是什么?