Customizing UI exceptions
Atoti Sign-Off allows you to display custom error messages in the UI.
To do this, return a response type in the structure of a ProblemDetail object.
Steps
- Create a class annotated with
@RestControllerAdviceor@ControllerAdviceand import it into your main Spring configuration class. - Add a method in this class annotated with
@ExceptionHandler. The@ExceptionHandlerannotation should contain the classes of exceptions you’d like to handle. - Make that method return a
ProblemDetailobject. - Throw your desired exception from within the application. A
ProblemDetailresponse should be returned which our UI will parse.
How it works
An example of how you can do this might look as follows:
@RestControllerAdvice
public class RestExceptionHandlerControllerAdvice {
@ExceptionHandler({ MyCustomException.class })
ProblemDetail handleRestServiceException(MyCustomException ex) {
ProblemDetail problemDetail = ProblemDetail.forStatusAndDetail(ex.getHttpStatus(), ex.getMessage());
problemDetail.setProperty("action", ex.getAction());
problemDetail.setProperty("stacktrace", ExceptionUtils.getStackTrace(ex));
return problemDetail;
}
}
This simple class is annotated with @RestControllerAdvice, meaning it will catch exceptions thrown from REST methods. In reality, it inherits from the global
exception handler @ControllerAdvice, which handles exceptions thrown from any method.
The single method in RestExceptionHandlerControllerAdvice catches the generic exception MyCustomException using the @ExceptionHandler annotation and returns a ProblemDetail object, which our UI will parse appropriately.
The ProblemDetail object accepts a map of variables that may hold custom fields of interest. For example, we supply the following fields:
action: a string you can use to suggest a course of action to the user, which is displayed by the UI.stacktrace: a string that contains the stack trace of the exception. This is not displayed by the UI but can be useful for debugging via the network tab in your browser’s developer tools.
note
The @ExceptionHandler annotation accepts multiple exception classes for a single method and will catch any exceptions that inherit from the specified exception.
For more server-side information, see the Spring Framework Documentation: