Spring Boot Rest 10/10 – Manejo de excepciones y modificación de Status HTTP

20

En el anterior artículo, hablamos de cómo empaquetar y ejecutar nuestra aplicación de Spring Boot con Gradle. En este artículo revisaremos cómo manejar excepciones y Status HTTP, desde Spring.

Manejo de Excepciones

Primeramente revisemos cómo manejar excepciones en Spring. Podemos agregar bloques try-catch o simplemente cuando así lo definamos, de acuerdo a nuestra lógica. Lo importante es que la excepción lanzada cuente con el status HTTP que deseamos. Como se muestra en el siguiente ejemplo.

public Order getOrder(String orderId) {
    try {
        return orderRepository.findById(orderId).get();
    } catch(NoSuchElementException ex) {
        log.severe(String.format("Order requested: %s, not found", orderId));
        throw new OrderNotFoundException("Order not found");
    }
}

Nota que la definición de la Excepción, está anotada con @ResponseStatus, y el status que deseamos regresar. En este caso NOT_FOUND.

@ResponseStatus(HttpStatus.NOT_FOUND)
public class OrderNotFoundException extends RuntimeException {

    private static final long serialVersionUID = 1L;

    public OrderNotFoundException(@Nullable String s) {
        super(s);
    }

    public OrderNotFoundException(@Nullable String s, @Nullable Throwable throwable) {
        super(s, throwable);
    }
}

Status HTTP

Para cambiar el status HTTP por default que Spring regresará, basta con regresar un objeto ReponseEntity con del tipo que requiramos en nuestro Json de Response. Después, asignaremos el status deseado en el método .status(), en este caso: CREATED. Finalmente, el el método .body() el objeto que regresaremos como Json.

@PostMapping("/order/{name}/{quantity}")
public ResponseEntity<Order> createOrder(@PathVariable("name") @NotBlank String coffeeName, @PathVariable("quantity") @Min(1) int quantity) {
    log.info(String.format("POST CoffeeController createOrder with coffeeName: %s, and quantity: %d", coffeeName, quantity));
    return ResponseEntity
            .status(HttpStatus.CREATED)
            .body(coffeeService.createOrder(coffeeName, quantity));
}

Muchas gracias por seguir tutorial de Spring Boot REST, 🎉 puedes ver todos los temas revisados en el temario. Déjanos saber tus comentarios u opiniones sobre este y otros tutoriales por Twitter. 😊

Repositorio de Github

Puedes encontrar el código del proyecto en el siguiente repositorio de Github:

https://github.com/chuucks/coffee-service


La configuración del proyecto de Spring Boot con Gradle, conexión a Mongo DB y autenticación básica de HTTP, en esta plataforma tiene únicamente fines educativos e ilustrativos. Para usar en producción requiere de mayores consideraciones, configuraciones y especificaciones. No dudes en contactarnos para cualquier duda o comentario o incluso abrir un Issue de Github en el repositorio del proyecto. 👍🏾

Comments

comments