Custom Handler Exceptions en Kotlin
En Kotlin, las excepciones son eventos anómalos o inesperados que ocurren durante la ejecución de un programa. Estas excepciones pueden ser causadas por errores de programación, errores de entrada/salida, errores de red, entre otros.
Las excepciones en Kotlin son objetos de la clase Throwable o cualquier subclase de esta clase. La clase Throwable es la clase base de todas las excepciones en Kotlin y proporciona una estructura básica para manejar excepciones.
Kotlin proporciona dos tipos de excepciones: excepciones checadas y excepciones no checadas.
- Excepciones checadas: son aquellas que deben ser manejadas explícitamente en el código mediante un bloque try-catch o mediante la declaración throws en la firma del método. Ejemplos de excepciones checadas en Kotlin son IOException y SQLException.
- Excepciones no checadas: son aquellas que no requieren ser manejadas explícitamente en el código. Estas excepciones son causadas por errores en el código o problemas del sistema y deben ser manejadas por el sistema o el programador mediante la creación de un controlador de excepciones. Ejemplos de excepciones no checadas en Kotlin son NullPointerException y IllegalArgumentException.
En general, en Kotlin es recomendable manejar las excepciones para poder manejar los posibles errores en nuestro código y proporcionar una respuesta adecuada al usuario.
En Kotlin, podemos manejar excepciones en nuestra aplicación Spring Boot utilizando el controlador RestControllerAdvice. Este controlador permite capturar y manejar excepciones de forma eficiente en nuestra aplicación de Spring Boot.
Para utilizar el controlador RestControllerAdvice, primero debemos agregarlo como dependencia en nuestro archivo build.gradle:
dependencies {
implementation("org.springframework.boot:spring-boot-starter-web")
}
Una vez agregada la dependencia, podemos crear un controlador de excepciones en nuestra aplicación. Por ejemplo, podemos crear un controlador que maneje excepciones de tipo “ResourceNotFoundException”:
@RestControllerAdvice
class RestExceptionHandler {
@ExceptionHandler(ResourceNotFoundException::class)
fun handleResourceNotFound(ex: ResourceNotFoundException): ResponseEntity<ErrorResponse> {
return ResponseEntity(ErrorResponse("Resource not found", ex.message), HttpStatus.NOT_FOUND)
}
}
En este ejemplo, el controlador RestExceptionHandler tiene un método handleResourceNotFound() que maneja excepciones de tipo ResourceNotFoundException. Dentro de este método, creamos una respuesta de error que contiene un mensaje de error y el mensaje de excepción original, y devolvemos una respuesta HTTP con código de estado 404 (NOT_FOUND).
También podemos crear controladores de excepciones para manejar otras excepciones, como excepciones de validación o excepciones de negocio personalizadas.
Para probar el controlador de excepciones, podemos crear un controlador de rest que lance una ResourceNotFoundException cuando se llama a un recurso no existente:
@RestController
class MyController {
@GetMapping("/resource/{id}")
fun getResource(@PathVariable("id") id: Int): Resource {
if (!resourceExists(id)) {
throw ResourceNotFoundException("Resource with id $id not found")
}
return resource
}
}
En este ejemplo, si se llama al recurso /resource/{id} y el id no existe, se lanzará una ResourceNotFoundException y el controlador RestExceptionHandler manejará la excepción y devolverá una respuesta de error con código de estado 404.
En resumen, utilizando el controlador RestControllerAdvice en Kotlin y Spring Boot podemos capturar y manejar excepciones de forma eficiente en nuestra aplicación, devolviendo respuestas HTTP adecuadas a los clientes.
También dejo un video en el que explico como manejar las excepciones pero con java :