scala – 播放JSON组合
发布时间:2020-12-16 19:02:15 所属栏目:安全 来源:网络整理
导读:在Play 2.1中,我们使用下面的东西,通过读取从 JSON获取生物对象. implicit val creatureReads = ( (__ "name").read[String] and (__ "isDead").read[Boolean] and (__ "weight").read[Float])(Creature.apply _) 在Scala中是相对新的,我试图明白是否
在Play 2.1中,我们使用下面的东西,通过读取从
JSON获取生物对象.
implicit val creatureReads = ( (__ "name").read[String] and (__ "isDead").read[Boolean] and (__ "weight").read[Float] )(Creature.apply _) 在Scala中是相对新的,我试图明白是否有任何其他方式构建Creature对象而不使用Apply方法?是否有可能有一个匿名的功能来创建对象,而不是依赖于应用? 我使用的情况下,我的对象中的大多数字段可能会丢失,但我仍然希望从我所拥有的内容中构建对象.最好是为对象定义一个READ,并为每个字段使用readnullable? 我也可以有复杂的条件,所以只需定义自定义函数来构建它,而不是试图捕获一个读者中的所有案例,这将是更清洁的? 解决方法
是的,当然,apply方法只是一种方法,可以使用所有的case类参数.这大致翻译成如下:
implicit val creatureReads = ( (__ "name").read[String] and (__ "isDead").read[Boolean] and (__ "weight").read[Float] )((name: String,isDead: Boolean,weight: Float) => new Creature(name,isDead,weight)) 对于缺少的字段,您应该使用readNullable并将您的类字段包装到Option中.如果您的可选字段有明确的默认值,则可以使用orElse(Reads.pure(value)). 假设权重是可选的,默认情况下isDead为false: implicit val creatureReads = ( (__ "name").read[String] and (__ "isDead").read[Boolean].orElse(Reads.pure(false)) and (__ "weight").readNullable[Float] )(Creature.apply _) 有时你甚至不想从JSON中读取一些东西.在这种情况下,一种可能性是明确地传递该值: def creatureReads(createdAt: DateTime) = ( (__ "name").read[String] and (__ "isDead").read[Boolean].orElse(Reads.pure(false)) and (__ "weight").readNullable[Float] and (__ "createdAt").read(createdAt) )(Creature.apply _) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |