gpt4 book ai didi

json - Playframework:如何将 JSON 绑定(bind)到包含 map 的案例类?

转载 作者:行者123 更新时间:2023-12-01 02:21:02 25 4
gpt4 key购买 nike

我正在使用带有 Scala 的 Playframework 2.2.1,并且我正在编写一个 REST API,用户可以在其中设置部分非结构化数据。基本上,用户将发布如下所示的 JSON:

{
"id": 1,
"name": "MyObject",
"properties": [
"myFirstProperty": "Value 1",
"mySecondProperty": "Value 2"
]
}

我希望它绑定(bind)到一个看起来像这样的案例类:
case class Preference(id: Long, name: String, properties: Map[String, String])

我希望利用 Play 的表单 API 来实现这一点,这样我就可以免费获得一堆不错的验证选项,但我还没有找到一种直接的方法来做到这一点。理想情况下(至少在我看来),我将能够按照以下方式定义 Form 对象:
Form(
mapping(
"id" -> longNumber,
"name" -> nonEmptyText(min = 5),
"properties" -> map(nonEmptyText, nonEmptyText)
)(Preference.apply)(Preference.unapply)
)

不幸的是,“ map (文本,文本)”是虚构的。有没有人使用表单 API 对此进行过类似的绑定(bind)?如果是这样,怎么做?如果没有,我很好奇你用什么来代替验证。都是手工完成的吗?

在此先感谢您的帮助!

最佳答案

也许我误解了你的问题,但没有the reads macro做你想做的事?

import play.api.libs.json._
import play.api.libs.functional.syntax._

implicit val preferenceReads = Json.reads[Preference]

使用隐含的范围,您可以使用 as , asOpt , 或 validate将您的 JSON 值转换为 Preference (见 the Play ScalaJson docs)。

关于json - Playframework:如何将 JSON 绑定(bind)到包含 map 的案例类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20478441/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com