Как сделать ответ по умолчанию Content-type: application / json с Scalatra - PullRequest
4 голосов
/ 19 апреля 2019

Я изучаю Scalatra и мне интересно, как я могу сделать тип контента по умолчанию для моих ответов application/json.Текущее значение по умолчанию: 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.

1 Ответ

3 голосов
/ 26 апреля 2019

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)
...