Skip to content

Commit dcba947

Browse files
committed
Allow custom ProblemDetail in ErrorResponse.Builder
Closes gh-30568
1 parent 2e43412 commit dcba947

File tree

2 files changed

+13
-6
lines changed

2 files changed

+13
-6
lines changed

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

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -53,13 +53,11 @@ final class DefaultErrorResponseBuilder implements ErrorResponse.Builder {
5353
private Object[] detailMessageArguments;
5454

5555

56-
DefaultErrorResponseBuilder(Throwable ex, HttpStatusCode statusCode, String detail) {
56+
DefaultErrorResponseBuilder(Throwable ex, ProblemDetail problemDetail) {
5757
Assert.notNull(ex, "Throwable is required");
58-
Assert.notNull(statusCode, "HttpStatusCode is required");
59-
Assert.notNull(detail, "`detail` is required");
6058
this.exception = ex;
61-
this.statusCode = statusCode;
62-
this.problemDetail = ProblemDetail.forStatusAndDetail(statusCode, detail);
59+
this.statusCode = HttpStatusCode.valueOf(problemDetail.getStatus());
60+
this.problemDetail = problemDetail;
6361
this.typeMessageCode = ErrorResponse.getDefaultTypeMessageCode(ex.getClass());
6462
this.titleMessageCode = ErrorResponse.getDefaultTitleMessageCode(ex.getClass());
6563
this.detailMessageCode = ErrorResponse.getDefaultDetailMessageCode(ex.getClass(), null);

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

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,16 @@ static ErrorResponse create(Throwable ex, HttpStatusCode statusCode, String deta
205205
* by a {@link MessageSource} lookup with {@link #getDetailMessageCode()}
206206
*/
207207
static Builder builder(Throwable ex, HttpStatusCode statusCode, String detail) {
208-
return new DefaultErrorResponseBuilder(ex, statusCode, detail);
208+
return builder(ex, ProblemDetail.forStatusAndDetail(statusCode, detail));
209+
}
210+
211+
/**
212+
* Variant of {@link #builder(Throwable, HttpStatusCode, String)} for use
213+
* with a custom {@link ProblemDetail} instance.
214+
* @since 6.1
215+
*/
216+
static Builder builder(Throwable ex, ProblemDetail problemDetail) {
217+
return new DefaultErrorResponseBuilder(ex, problemDetail);
209218
}
210219

211220

0 commit comments

Comments
 (0)