我正在学习Scalatra,想知道如何使响应application/json
成为默认的Content-Type。当前默认值为text/html
。整洁,但对我的应用程序并不是真正有用。
当前默认值为text/html
。
$ curl -i -X GET 'http://localhost:8080/v1/example'
HTTP/1.1 200 OK
Date: Fri, 19 Apr 2019 07:21:21 GMT
Content-Type: text/html;charset=utf-8
Content-Length: 23
Server: Jetty(9.4.8.v20171121)
HelloWorld(hello,world)
我可以通过application-json
标头明确获得Accepted: application/json
。
$ curl -i -X GET 'http://localhost:8080/v1/example' -H 'Accept: application/json'
HTTP/1.1 200 OK
Date: Fri, 19 Apr 2019 07:22:09 GMT
Content-Type: application/json;charset=utf-8
Transfer-Encoding: chunked
Server: Jetty(9.4.8.v20171121)
{"hello":"hello","world":"world"}
如何将默认设置为application/json
。
答案 0 :(得分:3)
defaultFormat
以将application/json
设置为默认大小写。例如,
import java.io.File
import org.scalatra._
import org.scalatra.util.MimeTypes
import org.json4s.{DefaultFormats, Formats}
import org.scalatra.json._
case class HelloWorld(hello: String, world: String)
class MyScalatraServlet extends ScalatraServlet with JacksonJsonSupport {
protected implicit lazy val jsonFormats: Formats = DefaultFormats
override def defaultFormat: Symbol = 'json
get("/v1/example") {
HelloWorld("hello", "world")
}
}
未指定Accept
标头应使用
curl -i -X GET 'http://localhost:8080/v1/example'
HTTP/1.1 200 OK
Date: Thu, 25 Apr 2019 22:28:37 GMT
Content-Type: application/json;charset=utf-8
Content-Length: 33
Server: Jetty(9.4.8.v20171121)
{"hello":"hello","world":"world"}
显式请求Accept: text/html
也可以
curl -i -X GET 'http://localhost:8080/v1/example' -H 'Accept: text/html'
HTTP/1.1 200 OK
Date: Fri, 26 Apr 2019 15:45:22 GMT
Content-Type: text/html;charset=utf-8
Content-Length: 23
Server: Jetty(9.4.8.v20171121)
HelloWorld(hello,world)