我正在用Play Framework和Scala创建一个后端API。我想将传入的请求映射到scala对象。该对象的实例变量之一是通道列表。以下是我目前拥有的:
接受请求并尝试将其映射到用户的Controller方法:
def addUser = Action(parse.json) { request =>
request.body.validate[User].fold({ errors =>
BadRequest(Json.obj(
"status" -> "Error",
"message" -> "Bad JSON",
"details" -> JsError.toFlatJson(errors)
))
}, { user =>
User.create(user.pushToken, user.channels)
Ok(Json.obj("status" -> "OK", "message" -> "User created"))
})
}
用户案例类:
case class User(id: Pk[Long], pushToken: String, channels: List[String])
implicit val userFormat = (
(__ \ "id").formatNullable[Long] and
(__ \ "pushToken").format[String] and
(__ \ "channels").format[List[String]]
)((id, pushToken, channels) => User(id.map(Id(_)).getOrElse(NotAssigned), pushToken, channels),
(u: User) => (u.id.toOption, u.pushToken, u.channels))
def create(pushToken: String, channels: List[String]) {
DB.withConnection { implicit c =>
SQL("insert into user (pushToken, channels) values ({pushToken}, {channels})").on(
'pushToken -> pushToken,
'channels -> channels
).executeUpdate()
}
}
Compilation error[could not find implicit value for parameter extractor: anorm.Column[List[String]]]
理想情况下,我希望作为一个用户能够接受这一点:
{
"pushToken":"4jkf-fdsja93-fjdska34",
"channels": [
"channelA", "channelB", "channelC"
]
}
并从中创建用户。
在Anorm中不能使用list[String]作为列值,这就是问题所在
您应该使用mkString方法或smth else
想象一下我有一个java列表 如果我想将其用作scala集合,比如缓冲区,我只需添加以下导入(如前面多次描述的) 问题是我必须检查列表是否不同于null。这将不起作用: 有没有一个简单的方法来转换java列表scala集合在这样一种方式,空转换为Buffer.empty?类似于选项工厂:
问题内容: 我想在Play2中将Scala对象列表反序列化为JSON映射-我说这是JSON的一个非常简单的用例。我的JSON输出如下所示: 为此,我正在看Play2的JSON文档 “ The Play JSON library” 。对我来说,他们的例子非常琐碎,我已经证实它们对我有用。因此,我能够正确地反序列化单个对象。 但是,当我阅读文档时,在Play2中制作包含JSON列表的映射似乎有些冗长。
Scala 集合 Scala 列表类似于数组,它们所有元素的类型都相同,但是它们也有所不同:列表是不可变的,值一旦被定义了就不能改变,其次列表 具有递归的结构(也就是链接表结构)而数组不是。。 列表的元素类型 T 可以写成 List[T]。例如,以下列出了多种类型的列表: // 字符串列表 val site: List[String] = List("Runoob", "Google", "Ba
假设您有一个JSON,它看起来像这样: 使用Scala和类型来表示这一点似乎很自然: 我的问题是:是否可以使用Jackson的Scala模块将上面的JSON序列化为一个? 我的尝试: 例外情况: 线程“main”com.fasterxml.jackson.databind.JsonMappingExctive中的异常:无法构造...项目的实例,问题:抽象类型需要映射到具体类型,具有自定义反序列化器
我有一个json 我怎么把它转换成学生名单(A,理科)(B,理科)
问题内容: 我在Web API项目中使用了Dictionary,该项目的序列化方式类似于JSON: 因为我有重复的键,所以我不能再使用Dictionary类型,而现在我正在使用 但这是以这种方式序列化的: 有没有办法像字典一样进行序列化? 谢谢。 问题答案: 如果您使用Newtonsoft Json.NET库,则可以执行以下操作。 定义一个转换器,以所需的方式写入键/值对的列表: 然后使用转换器: