【问题标题】:Using java classes in Play framework with Scala to be returned as Json Object在 Play 框架中使用带有 Scala 的 java 类作为 Json 对象返回
【发布时间】:2018-08-01 05:59:44
【问题描述】:

我有一些使用轴 wsdl2java 生成的 java 类。我想使用这些类以 Json 格式返回,但我不断收到各种错误,例如cannot convert Incident Object to HttpResponse try to make it writable

当尝试使用 Writable 时,它要求我检查它是否有 apply 方法。

有什么快速的方法可以让我按原样使用 java 类,而不必费心制作案例类。

【问题讨论】:

  • 您是否需要一种简单的方法来为 Java 类生成 Play json Writes/Format
  • 是的,基本上我试图用分块数据以 Json 格式响应它。这样客户端就不必等到所有数据都作为响应传递给他。
  • 我相信 play-json 和 circe 都不能与 Java 类一起使用,除非您编写自定义的 WritesEncoder。也许这可能有用:stackoverflow.com/questions/6388589/…

标签: java scala playframework writable


【解决方案1】:

您尝试使用Ok(MyClass()) 直接呈现一个类,但这是不可能的。您必须将其呈现为 JsonString 或任何可写的。 Json 可能是最好的选择。您应该使用像 play-json、circe 或其他几个库中的一个,并使用 Ok(Json.toJson(Myclass()))(用于 play-json)或等效项呈现您的响应。

【讨论】:

  • 试图做这样的事情。 val source = Source.apply[Incident](incidentsList.asScala.toList) Ok.chunked(source)。它是否适用于您提到的上述建议。原谅我缺乏知识。只是一个新人
  • 首先,您必须在 build.sbt 文件中将 json 库添加到您的依赖项中。之后您将不得不为源类型编写一个 json 编写器。您真的要分块回复吗?
  • 我也尝试过不使用分块格式。但是为该类编写 json writer 有点太多了,因为它包含该类的大约 60 多个属性。难道我们没有像 scala 的 Gson 库这样的东西吗?
  • 如果您使用 circe,您无需编写任何内容,只需添加一个导入。如果你使用 play-json 你只需要编写隐式 val myImplicitRead: OFormat[MyClass] = Json.format[MyClass] 但是使用 play-json 我认为你会遇到问题,因为你的类有超过 22 个属性(已知问题)。
猜你喜欢
  • 2013-05-28
  • 2017-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-12
  • 2015-08-01
  • 1970-01-01
相关资源
最近更新 更多