加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 如何在查询参数中喷射解组列表

发布时间:2020-12-16 18:39:02 所属栏目:安全 来源:网络整理
导读:我是新来的喷雾剂.我正在玩构建路由,虽然我设法使用参数指令从查询字符串中获取参数,但是当我希望其中一个参数成为列表时,我遇到了麻烦. 对于这个例子,我已经定义了这个案例类: case class Person(name: String,friends: Int) 我的路线目前看起来像这样: p
我是新来的喷雾剂.我正在玩构建路由,虽然我设法使用参数指令从查询字符串中获取参数,但是当我希望其中一个参数成为列表时,我遇到了麻烦.

对于这个例子,我已经定义了这个案例类:

case class Person(name: String,friends: Int)

我的路线目前看起来像这样:

path("test") { 
    get { parameters('name,'friend ).as(Person) { p => complete(p) } }
}

这工作正常,我可以做一个get:localhost:8080 / test?name = jo& friends = 12
并得到我所期望的.

我想传递朋友ID的列表,而不仅仅是朋友的数量,所以我开始更改我的案例类,如下所示:

case class Person(name: String,friends: Array[Int])

我打电话给:localhost:8080 / test?name = jo& friends = 1,2

这不编译.我得到一个类型不匹配:
????发现:Person.type
????required:spray.routing.HListDeserializer [shapeless.:: [String,shapeless.:: [String,shapeless.HNil]],?]
????get {parameters(‘name,’friend).as(Person){p =>
?????????????????????????????????????????^评论:这指向P in .as(人)

关于我做错了什么的任何想法?我喜欢这个怎么做的答案.更好的是解释它正在寻找的这种无形类型.谢谢

解决方法

第一个例子起作用,因为参数’friend可以自动从String转换为Int,因此满足Person case类的要求.

后者不起作用,因为没有String => Array [Int]转换可用,因此无法从两个字符串中实现Person.

您可以通过查看消息错误来判断它将’friend和’名称视为字符串

spray.routing.HListDeserializer[shapeless.::[String,shapeless.::[String,?]

可以简化为类似的东西

String :: String :: HNil

即它正在寻找可以将两个字符串反序列化为其他内容的东西.

最后,您需要提供自定义反序列化器,以便将“1,2”解析为Array [Int].

这是相关文档:http://spray.io/documentation/1.1-SNAPSHOT/spray-httpx/unmarshalling/#unmarshalling

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读