Java

Spring Boot #23 – Definiowanie własnych wyjątków

Spring Boot

W poprzednim artykule opisywałem jak poprawnie obsługiwać wyjątki. W tej części zaprezentuje w jaki sposób definiować własne wyjątki.

W celu zdefiniowania nowego wyjątku należy utworzyć nową klasę, która będzie dziedziczyć po Exception. Dobrą praktyką jest dodanie w nazwie sufixu Exception.

Przykład

W tym przykładzie zostanie stworzony wyjątek, który  wyświetla stosowny komunikat w przypadku kiedy podane imię jest zbyt krótkie.

Klasa wyjątku powinna dziedziczyć po Exception, ale można wybrać też mniej ogólny typ. W moim przypadku będzie to RuntimeException.

public class IncorrectNameException extends RuntimeException {

    private static final String EXCEPTION_MESSAGE = "The provided name is too short";

    public IncorrectNameException() {
        super(EXCEPTION_MESSAGE);
    }
}

Samo rzucenie wyjątku, niczym się nie różni od rzucania innych wyjątków:

@RestController
public class ExampleApi {

    @GetMapping("/sayHello")
    public String sayHello(@RequestParam String name) {
        if (name.length() <= 1) {
            throw new IncorrectNameException();
        }
        return "Hello " + name;
    }
}

Największa korzyścią jest możliwość przejmowania i dowolnego obsługiwania tych rodzajów wyjątków, które nas interesują.

@ControllerAdvice
public class ErrorHandler extends ResponseEntityExceptionHandler {

    @ExceptionHandler(IncorrectNameException.class)
    public ResponseEntity<Object> handleWebExeption(IncorrectNameException e, WebRequest webRequest) {
        System.err.println(Arrays.toString(e.getStackTrace()));
        return handleExceptionInternal(e, e.getMessage(), HttpHeaders.EMPTY, HttpStatus.BAD_REQUEST, webRequest);
    }
}

Projekt znajdziesz na GitHubie:
https://github.com/bykowski/springboot-errorhandling

Tags:
Show Buttons
Hide Buttons