Scala liftweb:获取模型字段
我是liftweb和scala的新手。 我正在为rss agregator开发json rest api,我有两个问题:Scala liftweb:获取模型字段,scala,lift,Scala,Lift,我是liftweb和scala的新手。 我正在为rss agregator开发json rest api,我有两个问题: package my.domain import net.liftweb.http._ import net.liftweb.http.rest._ import net.liftweb.json.JsonAST._ import net.liftweb.common.{Box,Full,Empty,Failure,ParamFailure} import my.dom
package my.domain
import net.liftweb.http._
import net.liftweb.http.rest._
import net.liftweb.json.JsonAST._
import net.liftweb.common.{Box,Full,Empty,Failure,ParamFailure}
import my.domain.model.{RssItem}
object ContentRest extends RestHelper {
def getFirstRssItem = {
val item = RssItem.find(ByField(RssItem.title, "test"))
item.title
}
serve {
case "api" :: "static" :: _ XmlGet _=> <b>Static</b>
case "api" :: "static" :: _ JsonGet _ => JString("string")
}
}
想知道您是否可以尝试使用net.liftweb.mapper.By(而不是ByField),例如 导入net.liftweb.mapper.By val item=RssItem.find(通过(RssItem.title,“测试”)
Find
返回一个框
(您可以像选项
一样使用该框),因为不清楚是否可以找到实际的元素
您可以编写如下内容,而不是item.title
item.map(_.title) openOr "untitled"
item.map({.title)
提供标题的框
,该框包含标题或为空(如果未找到任何项目)。如果没有框
,则会出现空错误。openOr
然后返回框
的内容或指定的默认值。正如Debilski指出的那样,查找()返回一个框[RssItem],如果没有项,则该框为空;如果找到项,则该框为满(item),因此获取标题需要一个map()或使用用于理解的(map/flatMap/filter上的语法sugar)
就查询而言,您需要的是By()而不是ByField()。我已清理了您的代码,以便它可以编译:
object ContentRest extends RestHelper {
def getFirstRssItemTitle = {
for {
item <- RssItem.find(By(RssItem.title, "test"))
} yield item.title
}
serve {
case "api" :: "static" :: _ XmlGet _=>
for {
title <- getFirstRssItemTitle ?~ "No RSS data"
} yield <b>{title}</b>
}
}
objectcontentrest扩展了RestHelper{
def getFirstRssItemTitle={
为了{
项目
为了{
标题第二个错误可能只是第一个错误的结果。
object ContentRest extends RestHelper {
def getFirstRssItemTitle = {
for {
item <- RssItem.find(By(RssItem.title, "test"))
} yield item.title
}
serve {
case "api" :: "static" :: _ XmlGet _=>
for {
title <- getFirstRssItemTitle ?~ "No RSS data"
} yield <b>{title}</b>
}
}