Scala - несоответствие типов динамических кодов состояния тапира

Я создаю конечную точку в тапире, которая требует динамических кодов состояния для вывода ошибки.

Я объявил черту тюленя FailureResponseи я создал классы case, расширяющие эту черту. Подобно показанному примеру https://tapir-scala.readthedocs.io/en/latest/endpoint/statuscodes.html

Модель

object AuthenticationModel {

  case class Request(productId: String)

  case class SuccessResponse(success: Boolean, status: Int, data: Token, message: String)

  sealed trait FailureResponse
  case class FailureResponse400(success: Boolean, status: Int = 400, errors: Array[Error], message: String) extends FailureResponse
  case class FailureResponse401(success: Boolean, status: Int = 401, errors: Array[Error], message: String) extends FailureResponse
  case class FailureResponse422(success: Boolean, status: Int = 422, errors: Array[Error], message: String) extends FailureResponse
  case class FailureResponse500(success: Boolean, status: Int = 500, errors: Array[Error], message: String) extends FailureResponse

  case class Token(token: String)
  case class Error(code: String, message: String)

}

Конечная точка

object Auth {

  val authenticationEndpoint : Endpoint[AuthenticationModel.Request, AuthenticationModel.FailureResponse, AuthenticationModel.SuccessResponse, Unit] = endpoint
    .tag("Auth")
    .description("Generates an idcheck token using product id")
    .post
    .in("auth")
    .in(jsonBody[AuthenticationModel.Request])
    .out(jsonBody[AuthenticationModel.SuccessResponse])
    .errorOut(oneOf(
      statusMapping(StatusCode.BadRequest, jsonBody[AuthenticationModel.FailureResponse400]),
      statusMapping(StatusCode.Unauthorized, jsonBody[AuthenticationModel.FailureResponse401]),
      statusMapping(StatusCode.UnprocessableEntity, jsonBody[AuthenticationModel.FailureResponse422]),
      statusMapping(StatusCode.InternalServerError, jsonBody[AuthenticationModel.FailureResponse500]),
    ))

}

Я установил тип параметра вывода ошибок как AuthenticationModel.FailureResponse.

Однако я получаю несоответствие типа

Обязательный AuthenticationModel.FailureResponse найден AuthenticationModel.FailureResponse с продуктом с сериализуемым

1 ответ

Решение находится в сообщении об ошибке:

просто измени свой

sealed trait FailureResponse

к

sealed trait FailureResponse extends Product with Serializable

Надеюсь, вам уже удалось решить эту проблему /

Другие вопросы по тегам