Log warning if ResponseStatus 'reason' is set and handler returns value
When a handler method is annotated with `@ResponseStatus(reason="...")`, Spring MVC will use `HttpServletResponse#sendError` to complete the response. As a result, the Servlet container will send an HTML error page and any existing data in the response buffer will be cleared. This commit clarifies the `@ResponseStatus` Javadoc and ensures that a message is logged at the WARN level if a handler method is annotated like this and still returns a non-Void value. In this case, the return value will be ignored and developers should be aware of this fact. See gh-31113 Closes gh-31121
This commit is contained in:
parent
bc6954255b
commit
94a49c4ed3
|
@ -80,7 +80,8 @@ public @interface ResponseStatus {
|
|||
/**
|
||||
* The <em>reason</em> to be used for the response.
|
||||
* <p>Defaults to an empty string which will be ignored. Set the reason to a
|
||||
* non-empty value to have it used for the response.
|
||||
* non-empty value to have it used to send a Servlet container error page.
|
||||
* In this case, the return value of the handler method will be ignored.
|
||||
* @see jakarta.servlet.http.HttpServletResponse#sendError(int, String)
|
||||
*/
|
||||
String reason() default "";
|
||||
|
|
|
@ -216,6 +216,9 @@ public class HandlerMethod extends AnnotatedMethod {
|
|||
|
||||
this.responseStatus = annotation.code();
|
||||
this.responseStatusReason = resolvedReason;
|
||||
if (StringUtils.hasText(this.responseStatusReason) && getMethod().getReturnType() != void.class) {
|
||||
logger.warn("Return value of [" + getMethod() + "] will be ignored since @ResponseStatus 'reason' attribute is set.");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue