Now I need to configure the StatusPages
plugin to handle these exceptions globally.
private val logger = KotlinLogging.logger {}
fun StatusPagesConfig.configure() {
exception<UnauthorizedAccessException> { call, cause ->
logger.error(cause) { cause }
call.respond(
status = HttpStatusCode.Unauthorized,
message = cause.toResponse()
)
}
exception<ResourceNotFoundException> { call, cause ->
logger.error(cause) { cause }
call.respond(
status = HttpStatusCode.NotFound,
message = cause.toResponse()
)
}
// Generic 400 error, we just add some additional information
exception<BadRequestException> { call, cause ->
logger.error(cause) { cause }
call.respond(
status = HttpStatusCode.BadRequest,
message = ErrorResponse(
traceId = UUID.randomUUID(),
message = cause.message ?: "Unknown error occurred",
time = ZonedDateTime.now()
)
)
}
// Generic 404 error, we just add some additional information
exception<NotFoundException> { call, cause ->
logger.error(cause) { cause }
call.respond(
status = HttpStatusCode.NotFound,
message = ErrorResponse(
traceId = UUID.randomUUID(),
message = cause.message ?: "Unknown error occurred",
time = ZonedDateTime.now()
)
)
}
// Generic 500 error, we just add some additional information
exception<Throwable> { call, cause ->
logger.error(cause) { cause }
call.respond(
status = HttpStatusCode.InternalServerError,
message = ErrorResponse(
traceId = UUID.randomUUID(),
message = cause.message ?: "Unknown error occurred",
time = ZonedDateTime.now()
)
)
}
}
install(StatusPages) {
configure()
}