From 99ebbb98068324c2c26dd59484acbe9a8b62ae59 Mon Sep 17 00:00:00 2001 From: Jakob Odersky Date: Tue, 18 Jul 2017 17:30:52 -0700 Subject: Fixes to error message handling --- .../xyz/driver/pdsuicommon/error/DomainError.scala | 11 +++++++---- .../driver/pdsuicommon/error/ErrorsResponse.scala | 20 +++++++------------- 2 files changed, 14 insertions(+), 17 deletions(-) (limited to 'src/main/scala/xyz/driver/pdsuicommon/error') diff --git a/src/main/scala/xyz/driver/pdsuicommon/error/DomainError.scala b/src/main/scala/xyz/driver/pdsuicommon/error/DomainError.scala index fc8e474..c761414 100644 --- a/src/main/scala/xyz/driver/pdsuicommon/error/DomainError.scala +++ b/src/main/scala/xyz/driver/pdsuicommon/error/DomainError.scala @@ -32,7 +32,10 @@ object DomainError { /** Subclasses of this exception correspond to subclasses of DomainError. They * are used in REST service implementations to fail futures rather than * returning successful futures, completed with corresponding DomainErrors. */ -class DomainException(message: String) extends RuntimeException(message) -class NotFoundException(message: String) extends DomainException(message) // 404 -class AuthenticationException(message: String) extends DomainException(message) // 401 -class AuthorizationException(message: String) extends DomainException(message) // 403 +// scalastyle:off null +@SuppressWarnings(Array("org.wartremover.warts.Null")) +class DomainException(message: String, cause: Throwable = null) extends RuntimeException(message, cause) +class NotFoundException(message: String) extends DomainException(message) // 404 +class AuthenticationException(message: String) extends DomainException(message) // 401 +class AuthorizationException(message: String) extends DomainException(message) // 403 +// scalastyle:on null diff --git a/src/main/scala/xyz/driver/pdsuicommon/error/ErrorsResponse.scala b/src/main/scala/xyz/driver/pdsuicommon/error/ErrorsResponse.scala index 6ceadb2..3761cc5 100644 --- a/src/main/scala/xyz/driver/pdsuicommon/error/ErrorsResponse.scala +++ b/src/main/scala/xyz/driver/pdsuicommon/error/ErrorsResponse.scala @@ -5,15 +5,12 @@ import ErrorCode.{ErrorCode, Unspecified} import ErrorsResponse.ResponseError import xyz.driver.pdsuicommon.auth.{AnonymousRequestContext, RequestId} import xyz.driver.pdsuicommon.utils.Utils -import play.api.http.Writeable import play.api.libs.functional.syntax._ import play.api.libs.json._ -import play.api.mvc.{Result, Results} +import play.api.mvc.Results import xyz.driver.pdsuicommon.validation.JsonValidationErrors -class ErrorsResponse(val errors: Seq[ResponseError], private val httpStatus: Results#Status, val requestId: RequestId) { - def toResult(implicit writeable: Writeable[ErrorsResponse]): Result = httpStatus(this) -} +final case class ErrorsResponse(errors: Seq[ResponseError], requestId: RequestId) object ErrorsResponse { @@ -36,12 +33,10 @@ object ErrorsResponse { } - implicit val writes: Writes[ErrorsResponse] = Writes { errorsResponse => - Json.obj( - "errors" -> Json.toJson(errorsResponse.errors), - "requestId" -> Json.toJson(errorsResponse.requestId.value) - ) - } + implicit val errorsResponseJsonFormat: Format[ErrorsResponse] = ( + (JsPath \ "errors").format[Seq[ResponseError]] and + (JsPath \ "requestId").format[String] + )((errs, req) => ErrorsResponse.apply(errs, RequestId(req)), res => (res.errors, res.requestId.value)) // deprecated, will be removed in REP-436 def fromString(message: String, httpStatus: Results#Status)( @@ -53,7 +48,6 @@ object ErrorsResponse { message = message, code = Unspecified )), - httpStatus = httpStatus, requestId = context.requestId ) } @@ -83,7 +77,7 @@ object ErrorsResponse { ) } - new ErrorsResponse(errors, Results.BadRequest, context.requestId) + new ErrorsResponse(errors, context.requestId) } } -- cgit v1.2.3