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
Надеюсь, вам уже удалось решить эту проблему /