DelegatingWebMvcConfiguration properly delegates extendHandlerExceptionResolvers

Issue: SPR-14599
This commit is contained in:
Juergen Hoeller
2016-08-18 09:05:47 +02:00
parent 53819c472f
commit d2e3a1a4f5
4 changed files with 25 additions and 22 deletions

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2015 the original author or authors.
* Copyright 2002-2016 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -22,6 +22,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.format.FormatterRegistry;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.util.CollectionUtils;
import org.springframework.validation.MessageCodesResolver;
import org.springframework.validation.Validator;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
@@ -29,7 +30,7 @@ import org.springframework.web.method.support.HandlerMethodReturnValueHandler;
import org.springframework.web.servlet.HandlerExceptionResolver;
/**
* A sub-class of {@code WebMvcConfigurationSupport} that detects and delegates
* A subclass of {@code WebMvcConfigurationSupport} that detects and delegates
* to all beans of type {@link WebMvcConfigurer} allowing them to customize the
* configuration provided by {@code WebMvcConfigurationSupport}. This is the
* class actually imported by {@link EnableWebMvc @EnableWebMvc}.
@@ -45,10 +46,9 @@ public class DelegatingWebMvcConfiguration extends WebMvcConfigurationSupport {
@Autowired(required = false)
public void setConfigurers(List<WebMvcConfigurer> configurers) {
if (configurers == null || configurers.isEmpty()) {
return;
if (!CollectionUtils.isEmpty(configurers)) {
this.configurers.addWebMvcConfigurers(configurers);
}
this.configurers.addWebMvcConfigurers(configurers);
}
@@ -132,6 +132,11 @@ public class DelegatingWebMvcConfiguration extends WebMvcConfigurationSupport {
this.configurers.configureHandlerExceptionResolvers(exceptionResolvers);
}
@Override
protected void extendHandlerExceptionResolvers(List<HandlerExceptionResolver> exceptionResolvers) {
this.configurers.extendHandlerExceptionResolvers(exceptionResolvers);
}
@Override
protected void addCorsMappings(CorsRegistry registry) {
this.configurers.addCorsMappings(registry);

View File

@@ -131,11 +131,10 @@ public interface WebMvcConfigurer {
void configureHandlerExceptionResolvers(List<HandlerExceptionResolver> exceptionResolvers);
/**
* A hook for extending or modifying the list of
* {@link HandlerExceptionResolver}s after it has been configured. This may
* be useful for example to allow default resolvers to be registered and then
* insert a custom one through this method.
* @param exceptionResolvers the list of configured resolvers to extend.
* A hook for extending or modifying the list of {@link HandlerExceptionResolver}s
* after it has been configured. This may be useful for example to allow default
* resolvers to be registered and then insert a custom one through this method.
* @param exceptionResolvers the list of configured resolvers to extend
* @since 4.3
*/
void extendHandlerExceptionResolvers(List<HandlerExceptionResolver> exceptionResolvers);

View File

@@ -109,7 +109,7 @@ class WebMvcConfigurerComposite implements WebMvcConfigurer {
@Override
public void extendHandlerExceptionResolvers(List<HandlerExceptionResolver> exceptionResolvers) {
for (WebMvcConfigurer delegate : this.delegates) {
delegate.configureHandlerExceptionResolvers(exceptionResolvers);
delegate.extendHandlerExceptionResolvers(exceptionResolvers);
}
}