diff --git a/spring-web/src/main/java/org/springframework/http/ProblemDetail.java b/spring-web/src/main/java/org/springframework/http/ProblemDetail.java index 6796c6368a3..d78a4fc13ba 100644 --- a/spring-web/src/main/java/org/springframework/http/ProblemDetail.java +++ b/spring-web/src/main/java/org/springframework/http/ProblemDetail.java @@ -90,75 +90,10 @@ public class ProblemDetail { } - /** - * Variant of {@link #setType(URI)} for chained initialization. - * @param type the problem type - * @return the same instance - */ - public ProblemDetail withType(URI type) { - setType(type); - return this; - } - - /** - * Variant of {@link #setTitle(String)} for chained initialization. - * @param title the problem title - * @return the same instance - */ - public ProblemDetail withTitle(@Nullable String title) { - setTitle(title); - return this; - } - - /** - * Variant of {@link #setStatus(int)} for chained initialization. - * @param statusCode the response status for the problem - * @return the same instance - */ - public ProblemDetail withStatus(HttpStatusCode statusCode) { - Assert.notNull(statusCode, "HttpStatus is required"); - setStatus(statusCode.value()); - return this; - } - - /** - * Variant of {@link #setStatus(int)} for chained initialization. - * @param status the response status value for the problem - * @return the same instance - */ - public ProblemDetail withStatus(int status) { - setStatus(status); - return this; - } - - /** - * Variant of {@link #setDetail(String)} for chained initialization. - * @param detail the problem detail - * @return the same instance - */ - public ProblemDetail withDetail(@Nullable String detail) { - setDetail(detail); - return this; - } - - /** - * Variant of {@link #setInstance(URI)} for chained initialization. - * @param instance the problem instance URI - * @return the same instance - */ - public ProblemDetail withInstance(@Nullable URI instance) { - setInstance(instance); - return this; - } - - - // Setters for deserialization - /** * Setter for the {@link #getType() problem type}. *
By default, this is {@link #BLANK_TYPE}. * @param type the problem type - * @see #withType(URI) */ public void setType(URI type) { Assert.notNull(type, "'type' is required"); @@ -170,17 +105,22 @@ public class ProblemDetail { *
By default, if not explicitly set and the status is well-known, this * is sourced from the {@link HttpStatus#getReasonPhrase()}. * @param title the problem title - * @see #withTitle(String) */ public void setTitle(@Nullable String title) { this.title = title; } + /** + * Setter for the {@link #getStatus() problem status}. + * @param httpStatus the problem status + */ + public void setStatus(HttpStatus httpStatus) { + this.status = httpStatus.value(); + } + /** * Setter for the {@link #getStatus() problem status}. * @param status the problem status - * @see #withStatus(HttpStatusCode) - * @see #withStatus(int) */ public void setStatus(int status) { this.status = status; @@ -190,7 +130,6 @@ public class ProblemDetail { * Setter for the {@link #getDetail() problem detail}. *
By default, this is not set. * @param detail the problem detail - * @see #withDetail(String) */ public void setDetail(@Nullable String detail) { this.detail = detail; @@ -201,7 +140,6 @@ public class ProblemDetail { *
By default, when {@code ProblemDetail} is returned from an
* {@code @ExceptionHandler} method, this is initialized to the request path.
* @param instance the problem instance
- * @see #withInstance(URI)
*/
public void setInstance(@Nullable URI instance) {
this.instance = instance;
@@ -219,9 +157,6 @@ public class ProblemDetail {
}
-
- // Getters
-
/**
* Return the configured {@link #setType(URI) problem type}.
*/
@@ -312,4 +247,14 @@ public class ProblemDetail {
return new ProblemDetail(status);
}
+ /**
+ * Create a {@code ProblemDetail} instance with the given status and detail.
+ */
+ public static ProblemDetail forStatusAndDetail(HttpStatusCode status, String detail) {
+ Assert.notNull(status, "HttpStatusCode is required");
+ ProblemDetail problemDetail = forStatus(status.value());
+ problemDetail.setDetail(detail);
+ return problemDetail;
+ }
+
}
diff --git a/spring-web/src/main/java/org/springframework/web/HttpRequestMethodNotSupportedException.java b/spring-web/src/main/java/org/springframework/web/HttpRequestMethodNotSupportedException.java
index f9abbf683f8..5a28d87d448 100644
--- a/spring-web/src/main/java/org/springframework/web/HttpRequestMethodNotSupportedException.java
+++ b/spring-web/src/main/java/org/springframework/web/HttpRequestMethodNotSupportedException.java
@@ -96,7 +96,7 @@ public class HttpRequestMethodNotSupportedException extends ServletException imp
this.supportedMethods = supportedMethods;
String detail = "Method '" + method + "' is not supported.";
- this.body = ProblemDetail.forStatus(getStatusCode()).withDetail(detail);
+ this.body = ProblemDetail.forStatusAndDetail(getStatusCode(), detail);
}
diff --git a/spring-web/src/main/java/org/springframework/web/bind/MethodArgumentNotValidException.java b/spring-web/src/main/java/org/springframework/web/bind/MethodArgumentNotValidException.java
index 00e5db684fc..1f43c7be888 100644
--- a/spring-web/src/main/java/org/springframework/web/bind/MethodArgumentNotValidException.java
+++ b/spring-web/src/main/java/org/springframework/web/bind/MethodArgumentNotValidException.java
@@ -49,7 +49,7 @@ public class MethodArgumentNotValidException extends BindException implements Er
public MethodArgumentNotValidException(MethodParameter parameter, BindingResult bindingResult) {
super(bindingResult);
this.parameter = parameter;
- this.body = ProblemDetail.forStatus(getStatusCode()).withDetail("Invalid request content.");
+ this.body = ProblemDetail.forStatusAndDetail(getStatusCode(), "Invalid request content.");
}
@Override
diff --git a/spring-web/src/main/java/org/springframework/web/server/MissingRequestValueException.java b/spring-web/src/main/java/org/springframework/web/server/MissingRequestValueException.java
index 0f4ffc9ab10..0f4380b19da 100644
--- a/spring-web/src/main/java/org/springframework/web/server/MissingRequestValueException.java
+++ b/spring-web/src/main/java/org/springframework/web/server/MissingRequestValueException.java
@@ -40,7 +40,7 @@ public class MissingRequestValueException extends ServerWebInputException {
this.name = name;
this.type = type;
this.label = label;
- getBody().withDetail(getReason());
+ getBody().setDetail(getReason());
}
diff --git a/spring-web/src/main/java/org/springframework/web/server/UnsatisfiedRequestParameterException.java b/spring-web/src/main/java/org/springframework/web/server/UnsatisfiedRequestParameterException.java
index 077d0bf087b..9ed5be422db 100644
--- a/spring-web/src/main/java/org/springframework/web/server/UnsatisfiedRequestParameterException.java
+++ b/spring-web/src/main/java/org/springframework/web/server/UnsatisfiedRequestParameterException.java
@@ -42,7 +42,7 @@ public class UnsatisfiedRequestParameterException extends ServerWebInputExceptio
super(initReason(conditions, requestParams));
this.conditions = conditions;
this.requestParams = requestParams;
- getBody().withDetail("Invalid request parameters.");
+ getBody().setDetail("Invalid request parameters.");
}
private static String initReason(List