小编Jul*_*ont的帖子

当值为None时,在play-json序列化中输出Option [T]的'null'

我正在使用play-json的宏来定义隐式Writes序列化JSON.但是,似乎默认情况下play-json省略了字段Option设置为的字段None.有没有办法改变默认值,以便输出null?我知道如果我定义自己的Writes定义,这是可能的,但我有兴趣通过宏来减少样板代码.

case class Person(name: String, address: Option[String])

implicit val personWrites = Json.writes[Person]    
Json.toJson(Person("John Smith", None))

// Outputs: {"name":"John Smith"}
// Instead want to output: {"name":"John Smith", "address": null}
Run Code Online (Sandbox Code Playgroud)

json scala playframework-2.0

18
推荐指数
3
解决办法
5739
查看次数

如何在Play 2.1中将案例类序列化/反序列化为Json

我正在尝试将一些案例类序列化/反序列化为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)

我知道...包含只是一个字符串没有多大意义的情况下,类...但我需要序列化/反序列化的情况下,类非常相似,我上面描述的来自外部库中的一个.

任何的想法?我错过了什么吗?任何帮助将非常感激...我变得疯狂:-(谢谢.

json scala playframework-2.0 playframework-2.1

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

在Play Framework 2中显示错误

首先,我想说明我认为2.0的Play文档非常非常糟糕.

我正在寻找一种方法在HTML选择下面放置一个验证错误,就像播放一样,它会自动生成一个输入框.

我试图复制播放输入框的结果HTML代码的结构,但我确定我在HTML代码中缺少一些ifError-Scala模板行.

不好的是,找不到Play <2.0文档已涵盖的主题的Play 2.0文档.因此,如果您正在寻找文档中的解决方案,那么您将获得旧的,无法工作的文档.很沮丧!

validation error-handling playframework playframework-2.0

11
推荐指数
1
解决办法
9030
查看次数

Play Framework:PersistenceException:该类型不是注册实体?(Ebean)

我正在关注Java的Play Framework 2.0教程,并在尝试保存ebean Model(task.save())时遇到此错误.

[PersistenceException:类型[class models.Task]不是注册实体?如果没有明确列出要使用的实体类,Ebean将在类路径中搜索它们.如果实体位于Jar中,请检查ebean.properties文件中的ebean.search.jars属性,或者检查ServerConfig.addJar().

java persistence ebean playframework-2.0

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

Liferay Portlet和JSF:在渲染阶段重定向

我有一个问题是实现一个简单的HTTP重定向.

我使用Liferay 6.0.6,我们的portlet是用JSF2.0/PortletFaces构建的.

我想在加载视图时调用重定向(而不是在触发操作时).目前,我的函数由PreRenderView监听器调用.

<f:metadata>
  <f:event listener="#{myControler.dispatch}" type="preRenderView" />
</f:metadata>
Run Code Online (Sandbox Code Playgroud)

在这个函数中,我可以检查权限,做其他的事情,在某些情况下,我想将用户重定向到一个新的页面(而不是另一个视图).

我尝试了几种方法,但没有成功.具体来说,我认为这种方法可行:

getFacesContext().getExternalContext().redirect(url);
getFacesContext().responseComplete()
// => Can only redirect during ACTION_PHASE
Run Code Online (Sandbox Code Playgroud)

这个错误是合乎逻辑的,但是有一个强制重定向的解决方案.

它可以在另一个函数中实现,否则,我只需要Hibernate Session(在渲染阶段的开头设置)

你有想法解决这个问题吗?
谢谢!

ps:<redirect />或者?faces-redirect不使用portlet.

redirect portlet liferay jsf-2 liferay-6

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

如何向Play 2.0表单添加全局表单错误以指示乐观锁定失败

我有一个简单的模型对象:

case class Region(id: String, revision: Option[String], name: String)

object Region {        
    // Returns Some(region) if successful, None if revision doesn't match the latest
    // in the data store
    def insertOrUpdate(region: Region): Promise[Option[Region]]
}
Run Code Online (Sandbox Code Playgroud)

在我的控制器中,我想做这样的事情,但我不知道如何在响应中指出锁定失败.我想添加一个全局表单错误,但无法从API中看到.

def update(id: String) = Action {
    implicit request => regionForm.bindFromRequest.fold(
        formWithErrors => BadRequest(views.html.regions.edit(formWithErrors)),        
        region => Async{
            Region.insertOrUpdate(region).map{
                _ match {
                    case None => {
                    // How do I add a global form error indicating there were server side changes detected
                        BadRequest(views.html.regions.edit(regionForm.fill(region))
                    }
                    case Some(r) => …
Run Code Online (Sandbox Code Playgroud)

playframework playframework-2.0

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

向Scala对象播放2.1 JSON

我有一个Scala案例类

case class Example(name: String, number: Int)
Run Code Online (Sandbox Code Playgroud)

和一个伴侣

object Example {
  implicit object ExampleFormat extends Format[Example] {
    def reads(json: JsValue) = {
      JsSuccess(Example(
       (json \ "name").as[String],
       (json \ "number").as[Int]))
     }

     def writes(...){}
   }
}
Run Code Online (Sandbox Code Playgroud)

它将JSON转换为Scala对象.

当JSON有效时(即{"name":"name","number": 0}它工作正常.但是,当number引用时{"name":"name","number":"0"}我得到一个错误:validate.error.expected.jsnumber.

有没有一种方法,以隐式转换StringInt在这种情况下(假设号码是有效的)?

scala playframework-2.0 playframework-2.1

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

不要为每个SBT子项目发布泊坞窗图像

我有一个多项目的SBT/Play2应用程序,我需要为主项目发布一个Docker镜像(聚合其他项目).

问题是sbt-native-packager在我的本地仓库中发布所有PLAY项目的图像.根图像工作正常,但我有2个其他图像不应该发布.

我在plugins.sbt中添加了什么

addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "1.0.0-RC1")
Run Code Online (Sandbox Code Playgroud)

这是我的build.sbt

import Dependencies.Library._
import PlayKeys._
import com.typesafe.sbt.packager.docker._

lazy val root = (project in file("."))
  .enablePlugins(PlayScala)
  .enablePlugins(DockerPlugin)
  .settings(
    packageName in Docker := "docking-station",
    version in Docker := "latest",
    NativePackagerKeys.dockerBaseImage := "dockerfile/java:oracle-java8",
    NativePackagerKeys.dockerExposedPorts := Seq(9000, 9443),
    NativePackagerKeys.dockerExposedVolumes := Seq("/opt/docker/logs"),
  )
  .dependsOn(module1).aggregate(module1)
  .dependsOn(module2).aggregate(module2)
  .dependsOn(core).aggregate(core)

lazy val module1 = (project in file("modules/1"))
  .enablePlugins(PlayScala)
  .dependsOn(core)
  .dependsOn(entities)

lazy val module2 = (project in file("modules/2"))
  .enablePlugins(PlayScala)
  .dependsOn(core)

lazy val core = (project in file("modules/core"))
Run Code Online (Sandbox Code Playgroud)

这就是我得到的

sbt docker:publishLocal …

sbt playframework docker sbt-native-packager playframework-2.3

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

玩!框架表单绑定错误

我正在尝试将表单绑定到请求但它失败并出现以下错误:

Execution exception
[RuntimeException: Cannot instantiate class controllers.Application$RequestData. It must have a default constructor]
Run Code Online (Sandbox Code Playgroud)

错误描述看起来很简单,但看看代码:

public class RequestData {
    @Required
    public String id;

    public RequestData() { }

    public RequestData(String id) {
        this.id = id;
    }
}

public static Result index() {
    ...
    Form<RequestData> requestDataForm = form(RequestData.class);
    RequestData requestData = requestDataForm.bindFromRequest().get();
    ...
}
Run Code Online (Sandbox Code Playgroud)

您可以看到该类确实具有默认构造函数,因此此错误根本不明确.

有任何想法吗?谢谢.


编辑

有趣的是,在官方文档中,他们使用的示例没有默认构造函数.

java playframework-2.0

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