DelegatingWebMvcConfiguration properly delegates extendHandlerExceptionResolvers
Issue: SPR-14599
This commit is contained in:
		
							parent
							
								
									53819c472f
								
							
						
					
					
						commit
						d2e3a1a4f5
					
				| 
						 | 
				
			
			@ -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,11 +46,10 @@ 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);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
| 
						 | 
				
			
			@ -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);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -17,7 +17,7 @@
 | 
			
		|||
package org.springframework.web.servlet.config.annotation;
 | 
			
		||||
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.Arrays;
 | 
			
		||||
import java.util.Collections;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
import org.junit.Before;
 | 
			
		||||
| 
						 | 
				
			
			@ -89,10 +89,10 @@ public class DelegatingWebMvcConfigurationTests {
 | 
			
		|||
		delegatingConfig = new DelegatingWebMvcConfiguration();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	@Test
 | 
			
		||||
	public void requestMappingHandlerAdapter() throws Exception {
 | 
			
		||||
 | 
			
		||||
		delegatingConfig.setConfigurers(Arrays.asList(webMvcConfigurer));
 | 
			
		||||
		delegatingConfig.setConfigurers(Collections.singletonList(webMvcConfigurer));
 | 
			
		||||
		RequestMappingHandlerAdapter adapter = delegatingConfig.requestMappingHandlerAdapter();
 | 
			
		||||
 | 
			
		||||
		ConfigurableWebBindingInitializer initializer = (ConfigurableWebBindingInitializer) adapter.getWebBindingInitializer();
 | 
			
		||||
| 
						 | 
				
			
			@ -141,7 +141,7 @@ public class DelegatingWebMvcConfigurationTests {
 | 
			
		|||
	public void getCustomValidator() {
 | 
			
		||||
		given(webMvcConfigurer.getValidator()).willReturn(new LocalValidatorFactoryBean());
 | 
			
		||||
 | 
			
		||||
		delegatingConfig.setConfigurers(Arrays.asList(webMvcConfigurer));
 | 
			
		||||
		delegatingConfig.setConfigurers(Collections.singletonList(webMvcConfigurer));
 | 
			
		||||
		delegatingConfig.mvcValidator();
 | 
			
		||||
 | 
			
		||||
		verify(webMvcConfigurer).getValidator();
 | 
			
		||||
| 
						 | 
				
			
			@ -151,7 +151,7 @@ public class DelegatingWebMvcConfigurationTests {
 | 
			
		|||
	public void getCustomMessageCodesResolver() {
 | 
			
		||||
		given(webMvcConfigurer.getMessageCodesResolver()).willReturn(new DefaultMessageCodesResolver());
 | 
			
		||||
 | 
			
		||||
		delegatingConfig.setConfigurers(Arrays.asList(webMvcConfigurer));
 | 
			
		||||
		delegatingConfig.setConfigurers(Collections.singletonList(webMvcConfigurer));
 | 
			
		||||
		delegatingConfig.getMessageCodesResolver();
 | 
			
		||||
 | 
			
		||||
		verify(webMvcConfigurer).getMessageCodesResolver();
 | 
			
		||||
| 
						 | 
				
			
			@ -159,8 +159,7 @@ public class DelegatingWebMvcConfigurationTests {
 | 
			
		|||
 | 
			
		||||
	@Test
 | 
			
		||||
	public void handlerExceptionResolver() throws Exception {
 | 
			
		||||
 | 
			
		||||
		delegatingConfig.setConfigurers(Arrays.asList(webMvcConfigurer));
 | 
			
		||||
		delegatingConfig.setConfigurers(Collections.singletonList(webMvcConfigurer));
 | 
			
		||||
		delegatingConfig.handlerExceptionResolver();
 | 
			
		||||
 | 
			
		||||
		verify(webMvcConfigurer).configureMessageConverters(converters.capture());
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue