Как вернуть кастомный json в скалатре
Скалатра код:
import org.scalatra._
import org.json4s.{DefaultFormats, Formats}
import org.scalatra.json._
class AppServlet extends AppStack with JacksonJsonSupport{
protected implicit lazy val jsonFormats: Formats = DefaultFormats
private def generateJSON():((String, String),(String, String)) = {
val json = ("Firstname" -> "joe", "LastName" -> "cole")
json
}
before() {
contentType = formats("json")
}
get("/") {
generateJSON
}
}
Я пытаюсь вернуть простой JSON, используя скалярные рамки, и на выходе что-то вроде этого {"_1":{"Firstname":"joe"},"_2":{"LastName":"cole"}}
, Мне не нужно _1 или _2 для печати. Обратите внимание, я не пытаюсь вернуть какие-либо предметы. Мне просто нужно сделать свой собственный JSON, а затем вернуть его. Это не связано ни с какой моделью данных. Любая помощь приветствуется.
2 ответа
Решение
import org.scalatra._
import org.json4s.{DefaultFormats, Formats}
import org.scalatra.json._
import org.json4s._
import org.json4s.JsonDSL._
class AppServlet extends AppStack with JacksonJsonSupport{
protected implicit lazy val jsonFormats: Formats = DefaultFormats
private def generateJSON():JObject = {
val json = ("Firstname" -> "joe") ~ ("LastName" -> "cole")
json
}
get("/") {
generateJSON
}
}
То, что вы создаете, является кортежем (String, String)
Не удивительно, что результат такой. Вы должны либо создать класс case, либо, так как вы используете json4s
, вернуть:
// don't forget this:
// import org.json4s.JsonDSL._
("Firstname" -> "joe") ~ ("LastName" -> "cole")