Merge branch '6.1.x'
This commit is contained in:
commit
5cb4985234
|
@ -5,14 +5,14 @@
|
|||
|
||||
A common requirement for REST services is to include details in the body of error
|
||||
responses. The Spring Framework supports the "Problem Details for HTTP APIs"
|
||||
specification, {rfc-site}/rfc7807.html[RFC 7807].
|
||||
specification, {rfc-site}/rfc9457.html[RFC 9457].
|
||||
|
||||
The following are the main abstractions for this support:
|
||||
|
||||
- `ProblemDetail` -- representation for an RFC 7807 problem detail; a simple container
|
||||
- `ProblemDetail` -- representation for an RFC 9457 problem detail; a simple container
|
||||
for both standard fields defined in the spec, and for non-standard ones.
|
||||
- `ErrorResponse` -- contract to expose HTTP error response details including HTTP
|
||||
status, response headers, and a body in the format of RFC 7807; this allows exceptions to
|
||||
status, response headers, and a body in the format of RFC 9457; this allows exceptions to
|
||||
encapsulate and expose the details of how they map to an HTTP response. All Spring WebFlux
|
||||
exceptions implement this.
|
||||
- `ErrorResponseException` -- basic `ErrorResponse` implementation that others
|
||||
|
@ -28,7 +28,7 @@ and any `ErrorResponseException`, and renders an error response with a body.
|
|||
[.small]#xref:web/webmvc/mvc-ann-rest-exceptions.adoc#mvc-ann-rest-exceptions-render[See equivalent in the Servlet stack]#
|
||||
|
||||
You can return `ProblemDetail` or `ErrorResponse` from any `@ExceptionHandler` or from
|
||||
any `@RequestMapping` method to render an RFC 7807 response. This is processed as follows:
|
||||
any `@RequestMapping` method to render an RFC 9457 response. This is processed as follows:
|
||||
|
||||
- The `status` property of `ProblemDetail` determines the HTTP status.
|
||||
- The `instance` property of `ProblemDetail` is set from the current URL path, if not
|
||||
|
@ -37,7 +37,7 @@ already set.
|
|||
"application/problem+json" over "application/json" when rendering a `ProblemDetail`,
|
||||
and also falls back on it if no compatible media type is found.
|
||||
|
||||
To enable RFC 7807 responses for Spring WebFlux exceptions and for any
|
||||
To enable RFC 9457 responses for Spring WebFlux exceptions and for any
|
||||
`ErrorResponseException`, extend `ResponseEntityExceptionHandler` and declare it as an
|
||||
xref:web/webflux/controller/ann-advice.adoc[@ControllerAdvice] in Spring configuration. The handler
|
||||
has an `@ExceptionHandler` method that handles any `ErrorResponse` exception, which
|
||||
|
@ -54,7 +54,7 @@ any RFC 7807 response and take some action.
|
|||
== Non-Standard Fields
|
||||
[.small]#xref:web/webmvc/mvc-ann-rest-exceptions.adoc#mvc-ann-rest-exceptions-non-standard[See equivalent in the Servlet stack]#
|
||||
|
||||
You can extend an RFC 7807 response with non-standard fields in one of two ways.
|
||||
You can extend an RFC 9457 response with non-standard fields in one of two ways.
|
||||
|
||||
One, insert into the "properties" `Map` of `ProblemDetail`. When using the Jackson
|
||||
library, the Spring Framework registers `ProblemDetailJacksonMixin` that ensures this
|
||||
|
|
|
@ -24,11 +24,11 @@ generally supported for all return values.
|
|||
| For returning a response with headers and no body.
|
||||
|
||||
| `ErrorResponse`
|
||||
| To render an RFC 7807 error response with details in the body,
|
||||
| To render an RFC 9457 error response with details in the body,
|
||||
see xref:web/webflux/ann-rest-exceptions.adoc[Error Responses]
|
||||
|
||||
| `ProblemDetail`
|
||||
| To render an RFC 7807 error response with details in the body,
|
||||
| To render an RFC 9457 error response with details in the body,
|
||||
see xref:web/webflux/ann-rest-exceptions.adoc[Error Responses]
|
||||
|
||||
| `String`
|
||||
|
|
|
@ -5,14 +5,14 @@
|
|||
|
||||
A common requirement for REST services is to include details in the body of error
|
||||
responses. The Spring Framework supports the "Problem Details for HTTP APIs"
|
||||
specification, {rfc-site}/rfc7807[RFC 7807].
|
||||
specification, {rfc-site}/rfc9457[RFC 9457].
|
||||
|
||||
The following are the main abstractions for this support:
|
||||
|
||||
- `ProblemDetail` -- representation for an RFC 7807 problem detail; a simple container
|
||||
- `ProblemDetail` -- representation for an RFC 9457 problem detail; a simple container
|
||||
for both standard fields defined in the spec, and for non-standard ones.
|
||||
- `ErrorResponse` -- contract to expose HTTP error response details including HTTP
|
||||
status, response headers, and a body in the format of RFC 7807; this allows exceptions to
|
||||
status, response headers, and a body in the format of RFC 9457; this allows exceptions to
|
||||
encapsulate and expose the details of how they map to an HTTP response. All Spring MVC
|
||||
exceptions implement this.
|
||||
- `ErrorResponseException` -- basic `ErrorResponse` implementation that others
|
||||
|
@ -28,7 +28,7 @@ and any `ErrorResponseException`, and renders an error response with a body.
|
|||
[.small]#xref:web/webflux/ann-rest-exceptions.adoc#webflux-ann-rest-exceptions-render[See equivalent in the Reactive stack]#
|
||||
|
||||
You can return `ProblemDetail` or `ErrorResponse` from any `@ExceptionHandler` or from
|
||||
any `@RequestMapping` method to render an RFC 7807 response. This is processed as follows:
|
||||
any `@RequestMapping` method to render an RFC 9457 response. This is processed as follows:
|
||||
|
||||
- The `status` property of `ProblemDetail` determines the HTTP status.
|
||||
- The `instance` property of `ProblemDetail` is set from the current URL path, if not
|
||||
|
@ -37,7 +37,7 @@ already set.
|
|||
"application/problem+json" over "application/json" when rendering a `ProblemDetail`,
|
||||
and also falls back on it if no compatible media type is found.
|
||||
|
||||
To enable RFC 7807 responses for Spring WebFlux exceptions and for any
|
||||
To enable RFC 9457 responses for Spring WebFlux exceptions and for any
|
||||
`ErrorResponseException`, extend `ResponseEntityExceptionHandler` and declare it as an
|
||||
xref:web/webmvc/mvc-controller/ann-advice.adoc[@ControllerAdvice] in Spring configuration. The handler
|
||||
has an `@ExceptionHandler` method that handles any `ErrorResponse` exception, which
|
||||
|
@ -54,7 +54,7 @@ any RFC 7807 response and take some action.
|
|||
== Non-Standard Fields
|
||||
[.small]#xref:web/webflux/ann-rest-exceptions.adoc#webflux-ann-rest-exceptions-non-standard[See equivalent in the Reactive stack]#
|
||||
|
||||
You can extend an RFC 7807 response with non-standard fields in one of two ways.
|
||||
You can extend an RFC 9457 response with non-standard fields in one of two ways.
|
||||
|
||||
One, insert into the "properties" `Map` of `ProblemDetail`. When using the Jackson
|
||||
library, the Spring Framework registers `ProblemDetailJacksonMixin` that ensures this
|
||||
|
|
|
@ -228,11 +228,11 @@ level, xref:web/webmvc/mvc-servlet/exceptionhandlers.adoc[HandlerExceptionResolv
|
|||
See xref:web/webmvc/mvc-controller/ann-methods/responseentity.adoc[ResponseEntity].
|
||||
|
||||
| `ErrorResponse`
|
||||
| To render an RFC 7807 error response with details in the body,
|
||||
| To render an RFC 9457 error response with details in the body,
|
||||
see xref:web/webmvc/mvc-ann-rest-exceptions.adoc[Error Responses]
|
||||
|
||||
| `ProblemDetail`
|
||||
| To render an RFC 7807 error response with details in the body,
|
||||
| To render an RFC 9457 error response with details in the body,
|
||||
see xref:web/webmvc/mvc-ann-rest-exceptions.adoc[Error Responses]
|
||||
|
||||
| `String`
|
||||
|
|
|
@ -23,11 +23,11 @@ supported for all return values.
|
|||
| For returning a response with headers and no body.
|
||||
|
||||
| `ErrorResponse`
|
||||
| To render an RFC 7807 error response with details in the body,
|
||||
| To render an RFC 9457 error response with details in the body,
|
||||
see xref:web/webmvc/mvc-ann-rest-exceptions.adoc[Error Responses]
|
||||
|
||||
| `ProblemDetail`
|
||||
| To render an RFC 7807 error response with details in the body,
|
||||
| To render an RFC 9457 error response with details in the body,
|
||||
see xref:web/webmvc/mvc-ann-rest-exceptions.adoc[Error Responses]
|
||||
|
||||
| `String`
|
||||
|
|
|
@ -185,7 +185,7 @@ public class MediaType extends MimeType implements Serializable {
|
|||
/**
|
||||
* Public constant media type for {@code application/problem+json}.
|
||||
* @since 5.0
|
||||
* @see <a href="https://tools.ietf.org/html/rfc7807#section-6.1">
|
||||
* @see <a href="https://www.iana.org/assignments/media-types/application/problem+json">
|
||||
* Problem Details for HTTP APIs, 6.1. application/problem+json</a>
|
||||
*/
|
||||
public static final MediaType APPLICATION_PROBLEM_JSON;
|
||||
|
@ -199,7 +199,7 @@ public class MediaType extends MimeType implements Serializable {
|
|||
/**
|
||||
* Public constant media type for {@code application/problem+json}.
|
||||
* @since 5.0
|
||||
* @see <a href="https://tools.ietf.org/html/rfc7807#section-6.1">
|
||||
* @see <a href="https://www.iana.org/assignments/media-types/application/problem+json">
|
||||
* Problem Details for HTTP APIs, 6.1. application/problem+json</a>
|
||||
* @deprecated as of 5.2 in favor of {@link #APPLICATION_PROBLEM_JSON}
|
||||
* since major browsers like Chrome
|
||||
|
@ -225,7 +225,7 @@ public class MediaType extends MimeType implements Serializable {
|
|||
/**
|
||||
* Public constant media type for {@code application/problem+xml}.
|
||||
* @since 5.0
|
||||
* @see <a href="https://tools.ietf.org/html/rfc7807#section-6.2">
|
||||
* @see <a href="https://www.iana.org/assignments/media-types/application/problem+xml">
|
||||
* Problem Details for HTTP APIs, 6.2. application/problem+xml</a>
|
||||
*/
|
||||
public static final MediaType APPLICATION_PROBLEM_XML;
|
||||
|
|
|
@ -26,7 +26,7 @@ import org.springframework.util.Assert;
|
|||
import org.springframework.util.ObjectUtils;
|
||||
|
||||
/**
|
||||
* Representation for an RFC 7807 problem detail. Includes spec-defined
|
||||
* Representation for an RFC 9457 problem detail. Includes spec-defined
|
||||
* properties, and a {@link #getProperties() properties} map for additional,
|
||||
* non-standard properties.
|
||||
*
|
||||
|
@ -45,7 +45,7 @@ import org.springframework.util.ObjectUtils;
|
|||
* @author Rossen Stoyanchev
|
||||
* @author Juergen Hoeller
|
||||
* @since 6.0
|
||||
* @see <a href="https://datatracker.ietf.org/doc/html/rfc7807">RFC 7807</a>
|
||||
* @see <a href="https://datatracker.ietf.org/doc/html/rfc9457">RFC 9457</a>
|
||||
* @see org.springframework.web.ErrorResponse
|
||||
* @see org.springframework.web.ErrorResponseException
|
||||
*/
|
||||
|
|
|
@ -27,8 +27,8 @@ import org.springframework.http.ProblemDetail;
|
|||
import org.springframework.lang.Nullable;
|
||||
|
||||
/**
|
||||
* Representation of a complete RFC 7807 error response including status,
|
||||
* headers, and an RFC 7807 formatted {@link ProblemDetail} body. Allows any
|
||||
* Representation of a complete RFC 9457 error response including status,
|
||||
* headers, and an RFC 9457 formatted {@link ProblemDetail} body. Allows any
|
||||
* exception to expose HTTP error response information.
|
||||
*
|
||||
* <p>{@link ErrorResponseException} is a default implementation of this
|
||||
|
@ -58,7 +58,7 @@ public interface ErrorResponse {
|
|||
}
|
||||
|
||||
/**
|
||||
* Return the body for the response, formatted as an RFC 7807
|
||||
* Return the body for the response, formatted as an RFC 9457
|
||||
* {@link ProblemDetail} whose {@link ProblemDetail#getStatus() status}
|
||||
* should match the response status.
|
||||
*/
|
||||
|
|
|
@ -26,7 +26,7 @@ import org.springframework.lang.Nullable;
|
|||
|
||||
/**
|
||||
* {@link RuntimeException} that implements {@link ErrorResponse} to expose
|
||||
* an HTTP status, response headers, and a body formatted as an RFC 7807
|
||||
* an HTTP status, response headers, and a body formatted as an RFC 9457
|
||||
* {@link ProblemDetail}.
|
||||
*
|
||||
* <p>The exception can be used as is, or it can be extended as a more specific
|
||||
|
|
|
@ -75,7 +75,7 @@ public class MissingServletRequestPartException extends ServletException impleme
|
|||
}
|
||||
|
||||
/**
|
||||
* Return the body for the response, formatted as an RFC 7807
|
||||
* Return the body for the response, formatted as an RFC 9457
|
||||
* {@link ProblemDetail} whose {@link ProblemDetail#getStatus() status}
|
||||
* should match the response status.
|
||||
*/
|
||||
|
|
|
@ -217,7 +217,7 @@ public abstract class AbstractMessageWriterResultHandler extends HandlerResultHa
|
|||
throw ex;
|
||||
}
|
||||
|
||||
// For ProblemDetail, fall back on RFC 7807 format
|
||||
// For ProblemDetail, fall back on RFC 9457 format
|
||||
if (bestMediaType == null && ProblemDetail.class.isAssignableFrom(elementType.toClass())) {
|
||||
bestMediaType = selectMediaType(exchange, () -> getMediaTypesFor(elementType), this.problemMediaTypes);
|
||||
}
|
||||
|
|
|
@ -50,7 +50,7 @@ import org.springframework.web.server.UnsupportedMediaTypeStatusException;
|
|||
/**
|
||||
* A class with an {@code @ExceptionHandler} method that handles all Spring
|
||||
* WebFlux raised exceptions by returning a {@link ResponseEntity} with
|
||||
* RFC 7807 formatted error details in the body.
|
||||
* RFC 9457 formatted error details in the body.
|
||||
*
|
||||
* <p>Convenient as a base class of an {@link ControllerAdvice @ControllerAdvice}
|
||||
* for global exception handling in an application. Subclasses can override
|
||||
|
|
|
@ -276,7 +276,7 @@ public abstract class AbstractMessageConverterMethodProcessor extends AbstractMe
|
|||
List<MediaType> compatibleMediaTypes = new ArrayList<>();
|
||||
determineCompatibleMediaTypes(acceptableTypes, producibleTypes, compatibleMediaTypes);
|
||||
|
||||
// For ProblemDetail, fall back on RFC 7807 format
|
||||
// For ProblemDetail, fall back on RFC 9457 format
|
||||
if (compatibleMediaTypes.isEmpty() && ProblemDetail.class.isAssignableFrom(valueType)) {
|
||||
determineCompatibleMediaTypes(this.problemMediaTypes, producibleTypes, compatibleMediaTypes);
|
||||
}
|
||||
|
|
|
@ -58,7 +58,7 @@ import org.springframework.web.util.WebUtils;
|
|||
|
||||
/**
|
||||
* A class with an {@code @ExceptionHandler} method that handles all Spring MVC
|
||||
* raised exceptions by returning a {@link ResponseEntity} with RFC 7807
|
||||
* raised exceptions by returning a {@link ResponseEntity} with RFC 9457
|
||||
* formatted error details in the body.
|
||||
*
|
||||
* <p>Convenient as a base class of an {@link ControllerAdvice @ControllerAdvice}
|
||||
|
|
Loading…
Reference in New Issue