Interface ErrorResponse

All Known Implementing Classes:
AsyncRequestTimeoutException, ErrorResponseException, HandlerMethodValidationException, HttpMediaTypeException, HttpMediaTypeNotAcceptableException, HttpMediaTypeNotSupportedException, HttpRequestMethodNotSupportedException, MaxUploadSizeExceededException, MethodArgumentNotValidException, MethodNotAllowedException, MissingMatrixVariableException, MissingPathVariableException, MissingRequestCookieException, MissingRequestHeaderException, MissingRequestValueException, MissingRequestValueException, MissingServletRequestParameterException, MissingServletRequestPartException, NoHandlerFoundException, NoResourceFoundException, NoResourceFoundException, NotAcceptableStatusException, ResponseStatusException, ServerErrorException, ServerWebInputException, ServletRequestBindingException, UnsatisfiedRequestParameterException, UnsatisfiedServletRequestParameterException, UnsupportedMediaTypeStatusException, WebExchangeBindException

public interface ErrorResponse
Representation of a complete RFC 9457 error response including status, headers, and an RFC 9457 formatted ProblemDetail body. Allows any exception to expose HTTP error response information.

ErrorResponseException is a default implementation of this interface and a convenient base class for other exceptions to use.

ErrorResponse is supported as a return value from @ExceptionHandler methods that render directly to the response, e.g. by being marked @ResponseBody, or declared in an @RestController or RestControllerAdvice class.

Since:
6.0
Author:
Rossen Stoyanchev
See Also:
  • Method Details

    • getStatusCode

      HttpStatusCode getStatusCode()
      Return the HTTP status code to use for the response.
    • getHeaders

      default HttpHeaders getHeaders()
      Return headers to use for the response.
    • getBody

      ProblemDetail getBody()
      Return the body for the response, formatted as an RFC 9457 ProblemDetail whose status should match the response status.

      Note: The returned ProblemDetail may be updated before the response is rendered, e.g. via updateAndGetBody(MessageSource, Locale). Therefore, implementing methods should use an instance field, and should not re-create the ProblemDetail on every call, nor use a static variable.

    • getTypeMessageCode

      default String getTypeMessageCode()
      Return a code to use to resolve the problem "type" for this exception through a MessageSource. The type resolved through the MessageSource will be passed into URI.create(String) and therefore must be an encoded URI String.

      By default this is initialized via getDefaultTypeMessageCode(Class).

      Since:
      6.1
    • getTitleMessageCode

      default String getTitleMessageCode()
      Return a code to use to resolve the problem "title" for this exception through a MessageSource.

      By default this is initialized via getDefaultTitleMessageCode(Class).

    • getDetailMessageCode

      default String getDetailMessageCode()
      Return a code to use to resolve the problem "detail" for this exception through a MessageSource.

      By default this is initialized via getDefaultDetailMessageCode(Class, String).

    • getDetailMessageArguments

      @Nullable default Object[] getDetailMessageArguments()
      Return arguments to use along with a message code to resolve the problem "detail" for this exception through a MessageSource. The arguments are expanded into placeholders of the message value, e.g. "Invalid content type {0}".
    • getDetailMessageArguments

      @Nullable default Object[] getDetailMessageArguments(MessageSource messageSource, Locale locale)
      Variant of getDetailMessageArguments() that uses the given MessageSource for resolving the message argument values.

      This is useful for example to expand message codes from validation errors.

      The default implementation delegates to getDetailMessageArguments(), ignoring the supplied MessageSource and Locale.

      Parameters:
      messageSource - the MessageSource to use for the lookup
      locale - the Locale to use for the lookup
    • updateAndGetBody

      default ProblemDetail updateAndGetBody(@Nullable MessageSource messageSource, Locale locale)
      Use the given MessageSource to resolve the type, title, and detail message codes, and then use the resolved values to update the corresponding fields in getBody().
      Parameters:
      messageSource - the MessageSource to use for the lookup
      locale - the Locale to use for the lookup
    • getDefaultTypeMessageCode

      static String getDefaultTypeMessageCode(Class<?> exceptionType)
      Build a message code for the "type" field, for the given exception type.
      Parameters:
      exceptionType - the exception type associated with the problem
      Returns:
      "problemDetail.type." followed by the fully qualified class name
      Since:
      6.1
    • getDefaultTitleMessageCode

      static String getDefaultTitleMessageCode(Class<?> exceptionType)
      Build a message code for the "title" field, for the given exception type.
      Parameters:
      exceptionType - the exception type associated with the problem
      Returns:
      "problemDetail.title." followed by the fully qualified class name
    • getDefaultDetailMessageCode

      static String getDefaultDetailMessageCode(Class<?> exceptionType, @Nullable String suffix)
      Build a message code for the "detail" field, for the given exception type.
      Parameters:
      exceptionType - the exception type associated with the problem
      suffix - an optional suffix, e.g. for exceptions that may have multiple error message with different arguments
      Returns:
      "problemDetail." followed by the fully qualified class name and an optional suffix
    • create

      static ErrorResponse create(Throwable ex, HttpStatusCode statusCode, String detail)
      Static factory method to build an instance via builder(Throwable, HttpStatusCode, String).
    • builder

      static ErrorResponse.Builder builder(Throwable ex, HttpStatusCode statusCode, String detail)
      Return a builder to create an ErrorResponse instance.
      Parameters:
      ex - the underlying exception that lead to the error response; mainly to derive default values for the detail message code and for the title message code.
      statusCode - the status code to set in the response
      detail - the default value for the detail field, unless overridden by a MessageSource lookup with getDetailMessageCode()
    • builder

      static ErrorResponse.Builder builder(Throwable ex, ProblemDetail problemDetail)
      Variant of builder(Throwable, HttpStatusCode, String) for use with a custom ProblemDetail instance.
      Since:
      6.1