2012-09-25 2 views
1

저는 Lift 프레임 워크를 사용하여 Rest API를 사용하고 있습니다. 요청의 대부분은 잘 작동 반환 형식으로 JSON을 사용하고 있습니다 :Scala Lift Rest API 응답 HTML

serve ("api"/"item" prefix { 
    case _ :: Nil JsonGet _ => { 
     if (checkKey(S.params("api_key").mkString)) Item.newItem(S.params("item_id").mkString, S.params("api_key").mkString) 
    } 
    }) 

가 지금은 MySQL의 DB에 저장되어있는 일반 HTML을 반환하는 함수를 추가 할. 그래서 기본적으로 Resthelper에 문자열을 반환하고 싶습니다. 나는 이런 식으로 뭔가를 시도했지만 컴파일하지 않았다 "요리 책"

업데이트

serve { 
    case "itemDesc" :: itemnum :: _ => { 
     Item.getDescription(itemnum) 
    } 
    } 

어쩌면 내가 멍청하지만 난 리프트에서 아무것도 찾을 수 없습니다 :

serve { 
    case "itemDesc" :: AsInt(itemnum) :: _ XmlGet _ => { 
     Item.getDescription(itemnum) 
    } 
    } 

나는 html을 XML로 판매함으로써이 일을 바보짓을했습니다. 컴파일되었지만 마지막에는 작동하지 않았습니다. 분명히 RestHelper에서 정상적인 문자열을 되돌릴 수는 없습니다. 당신의 도움에 대한

덕분에

답변

1

당신은 다시 Box[LiftResponse]을 제공해야합니다.

그래서이 경우는 Full(PlainTextResponse(Item.getDescription(itemnum))이됩니다.

나는 또한 LiftResponse -> Box[LiftResponse]

+0

고마워요. 하지만 지금은 문제가 Item.getDecription (itemnum) 함수에 의해 반환되는 html로 html로 브라우저로 인쇄 된 HTML로 해석되지 않습니다. 내용이 html pre 태그로 싸여진 것 같습니다. –

+0

내 대답을 아래에서보십시오. – Lukasz

0
serve { 
    case "itemDesc" :: AsInt(itemnum) :: _ XmlGet _ => { 
     Full(PlainTextResponse(Item.getDescription(itemnum), ("Content-Type" -> "text/html") :: Nil, 200)) 
    } 
    } 

에서 암시 적 변환을 추가하면 정답입니다. PlainTextResponse에 컨텐트 유형을 추가하여 HTML을 파싱해야했습니다. 이 스 내핑으로 나는 매력처럼 내 나머지 API 작업을 할 수 있고 콘텐츠 유형 html로 일반 텍스트를 브라우저에 다시 반환하는 함수를 추가 할 수 있습니다.

+0

흠 나는 조금 해키 솔루션. 여기를보십시오 : http://scala-tools.org/mvnsites/liftweb-2.4/#net.liftweb.http.LiftResponse 그리고 "알려진 서브 클래스"를 확장하십시오. 이 경우 다음을 사용합니다. XhtmlResponse. 그러나 문제는 Item.getDescription은 String을 반환하고 이것은 html 파서와 XSS를 쉽게 소개 할 수 있다는 것을 의미합니다. 이 경우 스 니펫 (snippets), CSS 변환 및 모든 장점을 사용해야합니다. Rest는 json/xml을 얻거나 서버에 일부 데이터/상태를 푸시하는 것이 좋습니다. – Lukasz