Debe importar de dispatch.liftjson.Js._
.
Tener un rasgo no es útil, ya que no lo está usando. La importación JS._
traerá todo el contenido del objeto JS
a su alcance, incluido el implicit conversionrequestToJsonVerbs
que tiene desde trait ImplicitJsonVerbs
. Este método convierte un envío estándar Request
, que tiene desde :/("example.com")/path
, a un JsonVerbs
, que tiene el método >#
.
Aquí está una muestra abreviada de cómo consultar un API:
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]
})))
Como se puede ver, tengo las importaciones correctas (además de algunos de algunos Lift bibliotecas que me gustan), y mi Request
luego 'tiene' un método >#
. Doy a >#
una función que coincida con la firma esperada ((JValue) ⇒ T
) y nos vamos.
En caso de que se lo esté preguntando, específicamente estoy usando la capacidad de lift-json para extraer a clases de casos, lo que significa que T
será Device
. Sin embargo, lift-json también arroja una excepción si no puede convertir el JValue
a Device
, así que he envuelto toda mi solicitud con Helper.tryo
, un método de ayuda de elevación que ajusta una llamada try-catch, devolviendo un Box
. Box
es como el estándar Scala Option
pero con la adición de Failure
, que indica por qué un Box
está vacío. Entonces, en este caso obtendré un Full[Device]
o un Failure
. ¡Práctico!