Merge branch '6.1.x'

This commit is contained in:
Brian Clozel 2024-05-13 10:44:09 +02:00
commit 5cb4985234
14 changed files with 32 additions and 32 deletions

View File

@ -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

View File

@ -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`

View File

@ -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

View File

@ -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`

View File

@ -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`

View File

@ -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;

View File

@ -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
*/

View File

@ -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.
*/

View File

@ -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

View File

@ -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.
*/

View File

@ -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);
}

View File

@ -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

View File

@ -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);
}

View File

@ -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}