Package org.springframework.web

# Interface ErrorResponse

All Known Implementing Classes:
  `AsyncRequestTimeoutException`, `ErrorResponseException`, `HandlerMethodValidationException`, `HttpMediaTypeException`, `HttpMediaTypeNotAcceptableException`, `HttpMediaTypeNotSupportedException`, `HttpRequestMethodNotSupportedException`, `MaxUploadSizeExceededException`, `MethodArgumentNotValidException`, `MethodNotAllowedException`, `MissingMatrixVariableException`, `MissingPathVariableException`, `MissingRequestCookieException`, `MissingRequestHeaderException`, `MissingRequestValueException`, `MissingRequestValueException`, `MissingServletRequestParameterException`, `MissingServletRequestPartException`, `NotAcceptableStatusException`, `PayloadTooLargeException`, `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, for example, by being marked `@ResponseBody`, or declared in an `@RestController` or `RestControllerAdvice` class.

Since:
  6.0
Author:
  Rossen Stoyanchev
See Also:
  - `ErrorResponseException`

## Nested Class Summary

Nested Classes
Modifier and Type
Interface
Description
`static interface`
`ErrorResponse.Builder`
Builder for an `ErrorResponse`.
`static interface`
`ErrorResponse.Interceptor`
Callback to perform an action before an RFC-9457 `ProblemDetail` response is rendered.

## Method Summary

Modifier and Type
Method
Description
`static ErrorResponse.Builder`
`builder(Throwable ex, HttpStatusCode statusCode, String detail)`
Return a builder to create an `ErrorResponse` instance.
`static ErrorResponse.Builder`
`builder(Throwable ex, ProblemDetail problemDetail)`
Variant of `builder(Throwable, HttpStatusCode, String)` for use with a custom `ProblemDetail` instance.
`static ErrorResponse`
`create(Throwable ex, HttpStatusCode statusCode, String detail)`
Static factory method to build an instance via `builder(Throwable, HttpStatusCode, String)`.
`ProblemDetail`
`getBody()`
Return the body for the response, formatted as an RFC 9457 `ProblemDetail` whose `status` should match the response status.
`static String`
`getDefaultDetailMessageCode(Class<?> exceptionType, String suffix)`
Build a message code for the "detail" field, for the given exception type.
`static String`
`getDefaultTitleMessageCode(Class<?> exceptionType)`
Build a message code for the "title" field, for the given exception type.
`static String`
`getDefaultTypeMessageCode(Class<?> exceptionType)`
Build a message code for the "type" field, for the given exception type.
`default Object[]`
`getDetailMessageArguments()`
Return arguments to use along with a `message code` to resolve the problem "detail" for this exception through a `MessageSource`.
`default Object[]`
`getDetailMessageArguments(org.springframework.context.MessageSource messageSource, Locale locale)`
Variant of `getDetailMessageArguments()` that uses the given `MessageSource` for resolving the message argument values.
`default String`
`getDetailMessageCode()`
Return a code to use to resolve the problem "detail" for this exception through a `MessageSource`.
`default HttpHeaders`
`getHeaders()`
Return headers to use for the response.
`HttpStatusCode`
`getStatusCode()`
Return the HTTP status code to use for the response.
`default String`
`getTitleMessageCode()`
Return a code to use to resolve the problem "title" for this exception through a `MessageSource`.
`default String`
`getTypeMessageCode()`
Return a code to use to resolve the problem "type" for this exception through a `MessageSource`.
`default ProblemDetail`
`updateAndGetBody(org.springframework.context.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()`.

## 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, for example, 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, for example, "Invalid content type {0}".

### getDetailMessageArguments

@Nullable default Object[] getDetailMessageArguments(org.springframework.context.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 org.springframework.context.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, for example, 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