【问题标题】:Scala Play Sample App Json Serializer errorsScala Play 示例应用程序 Json 序列化程序错误
【发布时间】:2021-10-17 10:22:54
【问题描述】:

我正在尝试 Scala 和 Play 框架,并且拥有 10 多年的 Java/Spring 经验

下面是我正在尝试的源代码

路由文件

GET    /stock                      controllers.HomeController.saveStock

示例模型对象

import play.api.libs.json._

case class Stock(symbol: String = "", price: Double = 0d)

object Stock  {
  implicit def stockReads = Json.reads[Stock]
  implicit def stockWrites = Json.writes[Stock]
  implicit def stockFormat = Json.format[Stock]
}

样品控制器

import models.Stock
import javax.inject._
import play.api.mvc._
import play.api.libs.json._

@Singleton
class HomeController @Inject()(cc: ControllerComponents) extends AbstractController(cc: ControllerComponents) {
  def index() = Action { implicit request: Request[AnyContent] =>
    Ok(views.html.index())
  }
    def saveStock = Action{ implicit request: Request[AnyContent] =>
    var stocks = List(Stock())
    println(stocks)
    Ok(Json.toJson(Stock)).as("application/json")
    //Ok
  }
}

build.sbt

scalaVersion := "2.13.6"

libraryDependencies += guice
libraryDependencies += "org.scalatestplus.play" %% "scalatestplus-play" % "5.0.0" % Test
libraryDependencies += "com.typesafe.play" %% "play-server" % "2.8.8"
libraryDependencies += "com.typesafe.play" %% "play-slick" % "5.0.0"
libraryDependencies += "com.github.tminglei" %% "slick-pg" % "0.19.7"
libraryDependencies += "ai.x" %% "play-json-extensions" % "0.42.0"

错误 - http://localhost:9000/ 找不到类型 models.Stock.type 的 Json 序列化程序。尝试为此类型实现隐式写入或格式。

【问题讨论】:

  • 您是否尝试过按照建议进行操作?

标签: scala playframework sbt


【解决方案1】:

在错误消息“No Json serializer found for type models.Stock.type中,需要注意的重要一点是.type 后缀。

它指的是object Stock,而不是case class。那就是错误说“我不知道如何序列化object Stock”。

这是因为您写的是 Json.toJson(Stock) 而不是 Json.toJson(Stock()) 或者您的意思是 Json.toJson(stocks)

Stock 指的是object,而Stock() 正在实例化case class


还有:

  • 如果在结果中使用JsObject,则无需指定as(...)
  • 如果您提供Format,则不需要ReadsWrites(后者提供前2 个)
  • 使用val 而不是var(不变性是Scala 的优势)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-27
    • 2019-08-14
    • 2020-05-23
    • 2016-01-17
    相关资源
    最近更新 更多