Remove response content-type before error handling
Prior to this commit, the negotiated content-type during the request mapping phase would be kept as the response content-type header; this information is used when rendering the error response and prevents a new round of content negotiation to choose the media type that fits best. This commit removes the response content type information at the beginning of the error handling phase. Fixes gh-22452
This commit is contained in:
@@ -29,6 +29,7 @@ import org.springframework.context.ApplicationContext;
|
||||
import org.springframework.context.ApplicationContextAware;
|
||||
import org.springframework.context.ConfigurableApplicationContext;
|
||||
import org.springframework.core.ReactiveAdapterRegistry;
|
||||
import org.springframework.http.HttpHeaders;
|
||||
import org.springframework.http.codec.HttpMessageReader;
|
||||
import org.springframework.http.codec.ServerCodecConfigurer;
|
||||
import org.springframework.lang.Nullable;
|
||||
@@ -209,6 +210,9 @@ public class RequestMappingHandlerAdapter implements HandlerAdapter, Application
|
||||
|
||||
// Success and error responses may use different content types
|
||||
exchange.getAttributes().remove(HandlerMapping.PRODUCIBLE_MEDIA_TYPES_ATTRIBUTE);
|
||||
if (!exchange.getResponse().isCommitted()) {
|
||||
exchange.getResponse().getHeaders().remove(HttpHeaders.CONTENT_TYPE);
|
||||
}
|
||||
|
||||
InvocableHandlerMethod invocable = this.methodResolver.getExceptionHandlerMethod(exception, handlerMethod);
|
||||
if (invocable != null) {
|
||||
|
||||
Reference in New Issue
Block a user