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
Zobacz listę szkoleń


