Browse Source

Allow custom ProblemDetail in ErrorResponse.Builder

Closes gh-30568
pull/30690/head
rstoyanchev 3 years ago
parent
commit
dcba9475ba
  1. 8
      spring-web/src/main/java/org/springframework/web/DefaultErrorResponseBuilder.java
  2. 11
      spring-web/src/main/java/org/springframework/web/ErrorResponse.java

8
spring-web/src/main/java/org/springframework/web/DefaultErrorResponseBuilder.java

@ -53,13 +53,11 @@ final class DefaultErrorResponseBuilder implements ErrorResponse.Builder { @@ -53,13 +53,11 @@ final class DefaultErrorResponseBuilder implements ErrorResponse.Builder {
private Object[] detailMessageArguments;
DefaultErrorResponseBuilder(Throwable ex, HttpStatusCode statusCode, String detail) {
DefaultErrorResponseBuilder(Throwable ex, ProblemDetail problemDetail) {
Assert.notNull(ex, "Throwable is required");
Assert.notNull(statusCode, "HttpStatusCode is required");
Assert.notNull(detail, "`detail` is required");
this.exception = ex;
this.statusCode = statusCode;
this.problemDetail = ProblemDetail.forStatusAndDetail(statusCode, detail);
this.statusCode = HttpStatusCode.valueOf(problemDetail.getStatus());
this.problemDetail = problemDetail;
this.typeMessageCode = ErrorResponse.getDefaultTypeMessageCode(ex.getClass());
this.titleMessageCode = ErrorResponse.getDefaultTitleMessageCode(ex.getClass());
this.detailMessageCode = ErrorResponse.getDefaultDetailMessageCode(ex.getClass(), null);

11
spring-web/src/main/java/org/springframework/web/ErrorResponse.java

@ -205,7 +205,16 @@ public interface ErrorResponse { @@ -205,7 +205,16 @@ public interface ErrorResponse {
* by a {@link MessageSource} lookup with {@link #getDetailMessageCode()}
*/
static Builder builder(Throwable ex, HttpStatusCode statusCode, String detail) {
return new DefaultErrorResponseBuilder(ex, statusCode, detail);
return builder(ex, ProblemDetail.forStatusAndDetail(statusCode, detail));
}
/**
* Variant of {@link #builder(Throwable, HttpStatusCode, String)} for use
* with a custom {@link ProblemDetail} instance.
* @since 6.1
*/
static Builder builder(Throwable ex, ProblemDetail problemDetail) {
return new DefaultErrorResponseBuilder(ex, problemDetail);
}

Loading…
Cancel
Save