scala 忽略jsonBody请求和响应解析中的空字段| sttp.tapir.json.circe.jsonBody

y53ybaqx  于 2023-10-18  发布在  Scala
关注(0)|答案(1)|浏览(167)

在下面的例子中,如果我错过了请求主体中的任何字段,那么它就会在解析中给出错误,因为缺少字段。无论如何,我们可以忽略它,如果该字段不存在比它不应该给给予错误,而解析请求。同样在响应中,如果字段为空,则不应在响应中返回这些字段。我们如何才能做到这一点?

  1. import sttp.tapir.generic.auto._
  2. import sttp.tapir.json.circe.jsonBody
  3. import sttp.tapir.server.ServerEndpoint
  4. import sttp.tapir.{Endpoint, _}
  5. case class Request{field1:String,field2:String}
  6. case class Response{field1:String,field2:String}
  7. private lazy val reqBody = jsonBody[Request]
  8. private lazy val respBody = jsonBody[Response]
  9. private val postEP: Endpoint[Unit, (CommonHeader, Request), (StatusCode, ErrorInfo), (StatusCode, Response), Any] =
  10. baseEndpoint.post
  11. .in("test")
  12. .in(reqBody)
  13. .out(statusCode.and(respBody))
92vpleto

92vpleto1#

如果某个字段是可选的,则应在模型中将其表示为可选字段。最好的方法是使用Option类型,例如。如下所示:

  1. import sttp.tapir.generic.auto._
  2. import sttp.tapir.json.circe.jsonBody
  3. import sttp.tapir.server.ServerEndpoint
  4. import sttp.tapir.{Endpoint, _}
  5. case class Request(field1: Option[String], field2: Option[String])
  6. case class Response(field1: Option[String], field2: Option[String])
  7. private lazy val reqBody = jsonBody[Request]
  8. private lazy val respBody = jsonBody[Response]
  9. private val postEP: Endpoint[Unit, (CommonHeader, Request), (StatusCode, ErrorInfo), (StatusCode, Response), Any] =
  10. baseEndpoint.post
  11. .in("test")
  12. .in(reqBody)
  13. .out(statusCode.and(respBody))

可选字段的值可以是Some(value)None

展开查看全部

相关问题