【问题标题】:how to return custom json in scalatra如何在scalatra中返回自定义json
【发布时间】:2017-05-21 16:22:34
【问题描述】:

Scalatra 代码:

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
  }
}

我正在尝试使用 scalatra 框架返回简单的 json,输出类似于 {"_1":{"Firstname":"joe"},"_2":{"LastName":"cole"}}。我不需要打印 _1 或 _2。请注意,我不是要返回任何对象。我只需要制作自己的json然后返回它。它不与任何数据模型相关联。任何帮助表示赞赏。

【问题讨论】:

  • 我不清楚你想要的输出是什么
  • @mfirry 我希望输出是这样的:{Firstname:joe, LastName:cole}
  • 我在任何 maven 工件中都找不到 AppStack - 你能指点一下吗?

标签: json scala scalatra scalatra-sbt


【解决方案1】:

你创建的是一个(String, String) 的元组,输出是这样的也就不足为奇了。您应该创建一个案例类,或者,因为您使用json4s,所以返回:

// don't forget this:
// import org.json4s.JsonDSL._
("Firstname" -> "joe") ~ ("LastName" -> "cole")

【讨论】:

    【解决方案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
      }
    }

    【讨论】: