dispatch.liftjson.Js._
'dan ithalat yapıyor olmalısınız.
Bir özellik kullanmak, onu kullanmadığınız için yardımcı olmaz. JS._
içe aktarımı, nesnesinin tüm içeriğini trait ImplicitJsonVerbs
'dan aldığı implicit conversionrequestToJsonVerbs
da dahil olmak üzere kapsamınıza getirir. Bu yöntem, :/("example.com")/path
numaralı Request
standardında, >#
yöntemine sahip olan JsonVerbs
numaralı standart Dispatch dönüştürür.
Burada bir API sorgulamak nasıl bir kısaltılmış örneği verilmiştir:
import dispatch._
import dispatch.liftjson.Js._
import net.liftweb.common.{Box, Failure, Full}
import net.liftweb.util.Helpers
case class Device(device_token: String, alias: Option[String])
val req = devicesReq/device_token as (app_token, secret)
Helpers.tryo(http(req ># (json => {
json.extract[Device]
})))
Gördüğünüz gibi, ben ve benim Request
ardından 'vardır' (bazı Lift Sevdiğim kütüphaneler için artı bazı) doğru ithalatı var >#
yöntemi. >#
değerini, beklenen imzayla ((JValue) ⇒ T
) eşleşen bir işleve verdiğim yere veriyorum.
Merak ediyorsanız, özellikle lift-json'un kasa sınıflarını ayıklama yeteneğini kullanıyorum, yani T
Device
olacaktır. Ancak, lift-json JValue
'u Device
'a dönüştüremiyorsa bir istisna atar, dolayısıyla tüm isteğimi Box
döndürerek bir try-catch çağrısını silen bir Lift helper yöntemi olan Helper.tryo
ile tamamladım. Box
, standart Scala Option
gibidir, ancak Failure
eklenmesiyle, neden Box
boş olduğunu belirtir. Yani, bu durumda ya bir Full[Device]
ya da bir Failure
alacağım. Kullanışlı!