scala – 如何表示spray-json中的可选字段?
发布时间:2020-12-16 09:15:28 所属栏目:安全 来源:网络整理
导读:我的请求有一个可选字段 case class SearchRequest(url: String,nextAt: Option[Date]) 我的协议是: object SearchRequestJsonProtocol extends DefaultJsonProtocol { implicit val searchRequestFormat = jsonFormat(SearchRequest,"url","nextAt")} 如何
我的请求有一个可选字段
case class SearchRequest(url: String,nextAt: Option[Date]) 我的协议是: object SearchRequestJsonProtocol extends DefaultJsonProtocol { implicit val searchRequestFormat = jsonFormat(SearchRequest,"url","nextAt") } 如何将nextAt字段标记为可选,以便可以正确读取和接受以下JSON对象: {"url":"..."} {"url":"...","nextAt":null} {"url":"...","nextAt":"2012-05-30T15:23Z"} 我实际上并不在乎空洞的情况,但如果你有细节,这将是很好的.我正在使用spray-json,并且有一个印象是,如果原始的JSON对象不存在,使用Option会跳过该字段. 解决方法
您可能需要创建一个显式格式(警告:psuedocodish):
object SearchRequestJsonProtocol extends DefaultJsonProtocol { implicit object SearchRequestJsonFormat extends JsonFormat[SearchRequest] { def read(value: JsValue) = value match { case JsObject(List( JsField("url",JsString(url)),JsField("nextAt",JsString(nextAt)))) => SearchRequest(url,Some(new Instant(nextAt))) case JsObject(List(JsField("url",JsString(url)))) => SearchRequest(url,None) case _ => throw new DeserializationException("SearchRequest expected") } def write(obj: SearchRequest) = obj.nextAt match { case Some(nextAt) => JsObject(JsField("url",JsString(obj.url)),JsString(nextAt.toString))) case None => JsObject(JsField("url",JsString(obj.url))) } } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 将Angularjs动态绑定到新创建的html元素
- 如何从angular-5中的url获取查询参数?
- 关于AXIS WebService通过HTTPS协议访问WAS Web服务错误问题
- scala – 如何实现reader monad访问数据库
- Vim自动关闭支架
- Bootstrap Metronic 学习记录(一)简介
- MySQL数据库多种安装方法及企业级安装实践(下篇)
- Jasmine / AngularJS:在单元测试中注入服务依赖服务?
- scala – 用于MongoDB的Casbah&Rogue – 查询功能
- Docker出现Cannot connect to the Docker daemon. Is the d