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

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

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

import sttp.tapir.generic.auto._
import sttp.tapir.json.circe.jsonBody
import sttp.tapir.server.ServerEndpoint
import sttp.tapir.{Endpoint, _}

case class Request{field1:String,field2:String}

case class Response{field1:String,field2:String}

 private lazy val reqBody = jsonBody[Request]
 

  private lazy val respBody = jsonBody[Response]

  private val postEP: Endpoint[Unit, (CommonHeader, Request), (StatusCode, ErrorInfo), (StatusCode, Response), Any] =
    baseEndpoint.post
      .in("test")
      .in(reqBody)
      .out(statusCode.and(respBody))
92vpleto

92vpleto1#

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

import sttp.tapir.generic.auto._
import sttp.tapir.json.circe.jsonBody
import sttp.tapir.server.ServerEndpoint
import sttp.tapir.{Endpoint, _}

case class Request(field1: Option[String], field2: Option[String])

case class Response(field1: Option[String], field2: Option[String])

private lazy val reqBody = jsonBody[Request]
private lazy val respBody = jsonBody[Response]

private val postEP: Endpoint[Unit, (CommonHeader, Request), (StatusCode, ErrorInfo), (StatusCode, Response), Any] =
    baseEndpoint.post
      .in("test")
      .in(reqBody)
      .out(statusCode.and(respBody))

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

相关问题