diff --git a/spring-test/src/main/java/org/springframework/test/web/servlet/setup/StandaloneMockMvcBuilder.java b/spring-test/src/main/java/org/springframework/test/web/servlet/setup/StandaloneMockMvcBuilder.java index cc1204d6e79..f03f8f5527a 100644 --- a/spring-test/src/main/java/org/springframework/test/web/servlet/setup/StandaloneMockMvcBuilder.java +++ b/spring-test/src/main/java/org/springframework/test/web/servlet/setup/StandaloneMockMvcBuilder.java @@ -62,6 +62,7 @@ import org.springframework.web.servlet.handler.MappedInterceptor; import org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver; import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter; import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping; +import org.springframework.web.servlet.resource.ResourceUrlProvider; import org.springframework.web.servlet.support.SessionFlashMapManager; import org.springframework.web.servlet.theme.FixedThemeResolver; import org.springframework.web.servlet.view.DefaultRequestToViewNameTranslator; @@ -374,7 +375,16 @@ public class StandaloneMockMvcBuilder extends AbstractMockMvcBuilder resolvers = registry.getViewResolvers(); ViewResolutionResultHandler handler = new ViewResolutionResultHandler( - resolvers, webFluxContentTypeResolver(), webFluxAdapterRegistry()); + resolvers, webFluxContentTypeResolver, webFluxAdapterRegistry); handler.setDefaultViews(registry.getDefaultViews()); handler.setOrder(registry.getOrder()); return handler; } @Bean - public ServerResponseResultHandler serverResponseResultHandler() { + public ServerResponseResultHandler serverResponseResultHandler( + ServerCodecConfigurer serverCodecConfigurer) { List resolvers = getViewResolverRegistry().getViewResolvers(); ServerResponseResultHandler handler = new ServerResponseResultHandler(); - handler.setMessageWriters(serverCodecConfigurer().getWriters()); + handler.setMessageWriters(serverCodecConfigurer.getWriters()); handler.setViewResolvers(resolvers); return handler; } diff --git a/spring-webflux/src/test/java/org/springframework/web/reactive/config/DelegatingWebFluxConfigurationTests.java b/spring-webflux/src/test/java/org/springframework/web/reactive/config/DelegatingWebFluxConfigurationTests.java index 96098a29094..bac0c180f59 100644 --- a/spring-webflux/src/test/java/org/springframework/web/reactive/config/DelegatingWebFluxConfigurationTests.java +++ b/spring-webflux/src/test/java/org/springframework/web/reactive/config/DelegatingWebFluxConfigurationTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2018 the original author or authors. + * Copyright 2002-2019 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. @@ -27,9 +27,12 @@ import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.springframework.context.support.StaticApplicationContext; +import org.springframework.core.ReactiveAdapterRegistry; import org.springframework.format.FormatterRegistry; +import org.springframework.format.support.FormattingConversionService; import org.springframework.http.codec.HttpMessageWriter; import org.springframework.http.codec.ServerCodecConfigurer; +import org.springframework.validation.Validator; import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean; import org.springframework.web.bind.support.ConfigurableWebBindingInitializer; import org.springframework.web.reactive.accept.RequestedContentTypeResolverBuilder; @@ -72,7 +75,7 @@ public class DelegatingWebFluxConfigurationTests { @Test public void requestMappingHandlerMapping() throws Exception { delegatingConfig.setConfigurers(Collections.singletonList(webFluxConfigurer)); - delegatingConfig.requestMappingHandlerMapping(); + delegatingConfig.requestMappingHandlerMapping(delegatingConfig.webFluxContentTypeResolver()); verify(webFluxConfigurer).configureContentTypeResolver(any(RequestedContentTypeResolverBuilder.class)); verify(webFluxConfigurer).addCorsMappings(any(CorsRegistry.class)); @@ -82,9 +85,14 @@ public class DelegatingWebFluxConfigurationTests { @Test public void requestMappingHandlerAdapter() throws Exception { delegatingConfig.setConfigurers(Collections.singletonList(webFluxConfigurer)); + ReactiveAdapterRegistry reactiveAdapterRegistry = delegatingConfig.webFluxAdapterRegistry(); + ServerCodecConfigurer serverCodecConfigurer = delegatingConfig.serverCodecConfigurer(); + FormattingConversionService formattingConversionService = delegatingConfig.webFluxConversionService(); + Validator validator = delegatingConfig.webFluxValidator(); ConfigurableWebBindingInitializer initializer = (ConfigurableWebBindingInitializer) - this.delegatingConfig.requestMappingHandlerAdapter().getWebBindingInitializer(); + this.delegatingConfig.requestMappingHandlerAdapter(reactiveAdapterRegistry, serverCodecConfigurer, + formattingConversionService, validator).getWebBindingInitializer(); verify(webFluxConfigurer).configureHttpMessageCodecs(codecsConfigurer.capture()); verify(webFluxConfigurer).getValidator(); @@ -107,7 +115,7 @@ public class DelegatingWebFluxConfigurationTests { return null; }).when(webFluxConfigurer).addResourceHandlers(any(ResourceHandlerRegistry.class)); - delegatingConfig.resourceHandlerMapping(); + delegatingConfig.resourceHandlerMapping(delegatingConfig.resourceUrlProvider()); verify(webFluxConfigurer).addResourceHandlers(any(ResourceHandlerRegistry.class)); verify(webFluxConfigurer).configurePathMatching(any(PathMatchConfigurer.class)); } @@ -115,7 +123,10 @@ public class DelegatingWebFluxConfigurationTests { @Test public void responseBodyResultHandler() throws Exception { delegatingConfig.setConfigurers(Collections.singletonList(webFluxConfigurer)); - delegatingConfig.responseBodyResultHandler(); + delegatingConfig.responseBodyResultHandler( + delegatingConfig.webFluxAdapterRegistry(), + delegatingConfig.serverCodecConfigurer(), + delegatingConfig.webFluxContentTypeResolver()); verify(webFluxConfigurer).configureHttpMessageCodecs(codecsConfigurer.capture()); verify(webFluxConfigurer).configureContentTypeResolver(any(RequestedContentTypeResolverBuilder.class)); @@ -124,7 +135,8 @@ public class DelegatingWebFluxConfigurationTests { @Test public void viewResolutionResultHandler() throws Exception { delegatingConfig.setConfigurers(Collections.singletonList(webFluxConfigurer)); - delegatingConfig.viewResolutionResultHandler(); + delegatingConfig.viewResolutionResultHandler(delegatingConfig.webFluxAdapterRegistry(), + delegatingConfig.webFluxContentTypeResolver()); verify(webFluxConfigurer).configureViewResolvers(any(ViewResolverRegistry.class)); } diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/DelegatingWebMvcConfiguration.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/DelegatingWebMvcConfiguration.java index 79272309e71..bcdc65c5b37 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/DelegatingWebMvcConfiguration.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/DelegatingWebMvcConfiguration.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2016 the original author or authors. + * Copyright 2002-2019 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. diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/WebMvcConfigurationSupport.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/WebMvcConfigurationSupport.java index 292e31cdb10..a785da4f9ca 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/WebMvcConfigurationSupport.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/WebMvcConfigurationSupport.java @@ -195,7 +195,7 @@ public class WebMvcConfigurationSupport implements ApplicationContextAware, Serv romePresent = ClassUtils.isPresent("com.rometools.rome.feed.WireFeed", classLoader); jaxb2Present = ClassUtils.isPresent("javax.xml.bind.Binder", classLoader); jackson2Present = ClassUtils.isPresent("com.fasterxml.jackson.databind.ObjectMapper", classLoader) && - ClassUtils.isPresent("com.fasterxml.jackson.core.JsonGenerator", classLoader); + ClassUtils.isPresent("com.fasterxml.jackson.core.JsonGenerator", classLoader); jackson2XmlPresent = ClassUtils.isPresent("com.fasterxml.jackson.dataformat.xml.XmlMapper", classLoader); jackson2SmilePresent = ClassUtils.isPresent("com.fasterxml.jackson.dataformat.smile.SmileFactory", classLoader); jackson2CborPresent = ClassUtils.isPresent("com.fasterxml.jackson.dataformat.cbor.CBORFactory", classLoader); @@ -273,11 +273,14 @@ public class WebMvcConfigurationSupport implements ApplicationContextAware, Serv * requests to annotated controllers. */ @Bean - public RequestMappingHandlerMapping requestMappingHandlerMapping() { + public RequestMappingHandlerMapping requestMappingHandlerMapping( + ContentNegotiationManager mvcContentNegotiationManager, + FormattingConversionService mvcConversionService, + ResourceUrlProvider mvcResourceUrlProvider) { RequestMappingHandlerMapping mapping = createRequestMappingHandlerMapping(); mapping.setOrder(0); - mapping.setInterceptors(getInterceptors()); - mapping.setContentNegotiationManager(mvcContentNegotiationManager()); + mapping.setInterceptors(getInterceptors(mvcConversionService, mvcResourceUrlProvider)); + mapping.setContentNegotiationManager(mvcContentNegotiationManager); mapping.setCorsConfigurations(getCorsConfigurations()); PathMatchConfigurer configurer = getPathMatchConfigurer(); @@ -325,12 +328,14 @@ public class WebMvcConfigurationSupport implements ApplicationContextAware, Serv * {@link HandlerMapping} instances with. *

This method cannot be overridden; use {@link #addInterceptors} instead. */ - protected final Object[] getInterceptors() { + protected final Object[] getInterceptors( + FormattingConversionService mvcConversionService, + ResourceUrlProvider mvcResourceUrlProvider) { if (this.interceptors == null) { InterceptorRegistry registry = new InterceptorRegistry(); addInterceptors(registry); - registry.addInterceptor(new ConversionServiceExposingInterceptor(mvcConversionService())); - registry.addInterceptor(new ResourceUrlProviderExposingInterceptor(mvcResourceUrlProvider())); + registry.addInterceptor(new ConversionServiceExposingInterceptor(mvcConversionService)); + registry.addInterceptor(new ResourceUrlProviderExposingInterceptor(mvcResourceUrlProvider)); this.interceptors = registry.getInterceptors(); } return this.interceptors.toArray(); @@ -441,7 +446,10 @@ public class WebMvcConfigurationSupport implements ApplicationContextAware, Serv */ @Bean @Nullable - public HandlerMapping viewControllerHandlerMapping() { + public HandlerMapping viewControllerHandlerMapping(PathMatcher mvcPathMatcher, + UrlPathHelper mvcUrlPathHelper, + FormattingConversionService mvcConversionService, + ResourceUrlProvider mvcResourceUrlProvider) { ViewControllerRegistry registry = new ViewControllerRegistry(this.applicationContext); addViewControllers(registry); @@ -449,9 +457,9 @@ public class WebMvcConfigurationSupport implements ApplicationContextAware, Serv if (handlerMapping == null) { return null; } - handlerMapping.setPathMatcher(mvcPathMatcher()); - handlerMapping.setUrlPathHelper(mvcUrlPathHelper()); - handlerMapping.setInterceptors(getInterceptors()); + handlerMapping.setPathMatcher(mvcPathMatcher); + handlerMapping.setUrlPathHelper(mvcUrlPathHelper); + handlerMapping.setInterceptors(getInterceptors(mvcConversionService, mvcResourceUrlProvider)); handlerMapping.setCorsConfigurations(getCorsConfigurations()); return handlerMapping; } @@ -468,10 +476,11 @@ public class WebMvcConfigurationSupport implements ApplicationContextAware, Serv * paths to controller bean names. */ @Bean - public BeanNameUrlHandlerMapping beanNameHandlerMapping() { + public BeanNameUrlHandlerMapping beanNameHandlerMapping(FormattingConversionService mvcConversionService, + ResourceUrlProvider mvcResourceUrlProvider) { BeanNameUrlHandlerMapping mapping = new BeanNameUrlHandlerMapping(); mapping.setOrder(2); - mapping.setInterceptors(getInterceptors()); + mapping.setInterceptors(getInterceptors(mvcConversionService, mvcResourceUrlProvider)); mapping.setCorsConfigurations(getCorsConfigurations()); return mapping; } @@ -488,10 +497,11 @@ public class WebMvcConfigurationSupport implements ApplicationContextAware, Serv * @since 5.2 */ @Bean - public RouterFunctionMapping routerFunctionMapping() { + public RouterFunctionMapping routerFunctionMapping(FormattingConversionService mvcConversionService, + ResourceUrlProvider mvcResourceUrlProvider) { RouterFunctionMapping mapping = new RouterFunctionMapping(); mapping.setOrder(3); - mapping.setInterceptors(getInterceptors()); + mapping.setInterceptors(getInterceptors(mvcConversionService, mvcResourceUrlProvider)); mapping.setCorsConfigurations(getCorsConfigurations()); mapping.setMessageConverters(getMessageConverters()); return mapping; @@ -504,21 +514,25 @@ public class WebMvcConfigurationSupport implements ApplicationContextAware, Serv */ @Bean @Nullable - public HandlerMapping resourceHandlerMapping() { + public HandlerMapping resourceHandlerMapping(UrlPathHelper mvcUrlPathHelper, + PathMatcher mvcPathMatcher, + ContentNegotiationManager mvcContentNegotiationManager, + FormattingConversionService mvcConversionService, + ResourceUrlProvider mvcResourceUrlProvider) { Assert.state(this.applicationContext != null, "No ApplicationContext set"); Assert.state(this.servletContext != null, "No ServletContext set"); ResourceHandlerRegistry registry = new ResourceHandlerRegistry(this.applicationContext, - this.servletContext, mvcContentNegotiationManager(), mvcUrlPathHelper()); + this.servletContext, mvcContentNegotiationManager, mvcUrlPathHelper); addResourceHandlers(registry); AbstractHandlerMapping handlerMapping = registry.getHandlerMapping(); if (handlerMapping == null) { return null; } - handlerMapping.setPathMatcher(mvcPathMatcher()); - handlerMapping.setUrlPathHelper(mvcUrlPathHelper()); - handlerMapping.setInterceptors(getInterceptors()); + handlerMapping.setPathMatcher(mvcPathMatcher); + handlerMapping.setUrlPathHelper(mvcUrlPathHelper); + handlerMapping.setInterceptors(getInterceptors(mvcConversionService, mvcResourceUrlProvider)); handlerMapping.setCorsConfigurations(getCorsConfigurations()); return handlerMapping; } @@ -580,11 +594,14 @@ public class WebMvcConfigurationSupport implements ApplicationContextAware, Serv * */ @Bean - public RequestMappingHandlerAdapter requestMappingHandlerAdapter() { + public RequestMappingHandlerAdapter requestMappingHandlerAdapter( + ContentNegotiationManager mvcContentNegotiationManager, + FormattingConversionService mvcConversionService, + Validator mvcValidator) { RequestMappingHandlerAdapter adapter = createRequestMappingHandlerAdapter(); - adapter.setContentNegotiationManager(mvcContentNegotiationManager()); + adapter.setContentNegotiationManager(mvcContentNegotiationManager); adapter.setMessageConverters(getMessageConverters()); - adapter.setWebBindingInitializer(getConfigurableWebBindingInitializer()); + adapter.setWebBindingInitializer(getConfigurableWebBindingInitializer(mvcConversionService, mvcValidator)); adapter.setCustomArgumentResolvers(getArgumentResolvers()); adapter.setCustomReturnValueHandlers(getReturnValueHandlers()); @@ -630,10 +647,12 @@ public class WebMvcConfigurationSupport implements ApplicationContextAware, Serv * Return the {@link ConfigurableWebBindingInitializer} to use for * initializing all {@link WebDataBinder} instances. */ - protected ConfigurableWebBindingInitializer getConfigurableWebBindingInitializer() { + protected ConfigurableWebBindingInitializer getConfigurableWebBindingInitializer( + FormattingConversionService mvcConversionService, + Validator mvcValidator) { ConfigurableWebBindingInitializer initializer = new ConfigurableWebBindingInitializer(); - initializer.setConversionService(mvcConversionService()); - initializer.setValidator(mvcValidator()); + initializer.setConversionService(mvcConversionService); + initializer.setValidator(mvcValidator); MessageCodesResolver messageCodesResolver = getMessageCodesResolver(); if (messageCodesResolver != null) { initializer.setMessageCodesResolver(messageCodesResolver); @@ -879,9 +898,11 @@ public class WebMvcConfigurationSupport implements ApplicationContextAware, Serv * @since 4.0 */ @Bean - public CompositeUriComponentsContributor mvcUriComponentsContributor() { + public CompositeUriComponentsContributor mvcUriComponentsContributor( + FormattingConversionService mvcConversionService, + RequestMappingHandlerAdapter requestMappingHandlerAdapter) { return new CompositeUriComponentsContributor( - requestMappingHandlerAdapter().getArgumentResolvers(), mvcConversionService()); + requestMappingHandlerAdapter.getArgumentResolvers(), mvcConversionService); } /** @@ -911,11 +932,12 @@ public class WebMvcConfigurationSupport implements ApplicationContextAware, Serv * which allows for providing a list of resolvers. */ @Bean - public HandlerExceptionResolver handlerExceptionResolver() { + public HandlerExceptionResolver handlerExceptionResolver( + ContentNegotiationManager mvcContentNegotiationManager) { List exceptionResolvers = new ArrayList<>(); configureHandlerExceptionResolvers(exceptionResolvers); if (exceptionResolvers.isEmpty()) { - addDefaultHandlerExceptionResolvers(exceptionResolvers); + addDefaultHandlerExceptionResolvers(exceptionResolvers, mvcContentNegotiationManager); } extendHandlerExceptionResolvers(exceptionResolvers); HandlerExceptionResolverComposite composite = new HandlerExceptionResolverComposite(); @@ -958,9 +980,10 @@ public class WebMvcConfigurationSupport implements ApplicationContextAware, Serv *

  • {@link DefaultHandlerExceptionResolver} for resolving known Spring exception types * */ - protected final void addDefaultHandlerExceptionResolvers(List exceptionResolvers) { + protected final void addDefaultHandlerExceptionResolvers(List exceptionResolvers, + ContentNegotiationManager mvcContentNegotiationManager) { ExceptionHandlerExceptionResolver exceptionHandlerResolver = createExceptionHandlerExceptionResolver(); - exceptionHandlerResolver.setContentNegotiationManager(mvcContentNegotiationManager()); + exceptionHandlerResolver.setContentNegotiationManager(mvcContentNegotiationManager); exceptionHandlerResolver.setMessageConverters(getMessageConverters()); exceptionHandlerResolver.setCustomArgumentResolvers(getArgumentResolvers()); exceptionHandlerResolver.setCustomReturnValueHandlers(getReturnValueHandlers()); @@ -1003,9 +1026,9 @@ public class WebMvcConfigurationSupport implements ApplicationContextAware, Serv * @since 4.1 */ @Bean - public ViewResolver mvcViewResolver() { + public ViewResolver mvcViewResolver(ContentNegotiationManager mvcContentNegotiationManager) { ViewResolverRegistry registry = new ViewResolverRegistry( - mvcContentNegotiationManager(), this.applicationContext); + mvcContentNegotiationManager, this.applicationContext); configureViewResolvers(registry); if (registry.getViewResolvers().isEmpty() && this.applicationContext != null) { diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/config/annotation/DelegatingWebMvcConfigurationTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/config/annotation/DelegatingWebMvcConfigurationTests.java index fe97abca84b..bb15ba6afa2 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/config/annotation/DelegatingWebMvcConfigurationTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/config/annotation/DelegatingWebMvcConfigurationTests.java @@ -97,7 +97,9 @@ public class DelegatingWebMvcConfigurationTests { @Test public void requestMappingHandlerAdapter() throws Exception { delegatingConfig.setConfigurers(Collections.singletonList(webMvcConfigurer)); - RequestMappingHandlerAdapter adapter = this.delegatingConfig.requestMappingHandlerAdapter(); + RequestMappingHandlerAdapter adapter = this.delegatingConfig.requestMappingHandlerAdapter( + this.delegatingConfig.mvcContentNegotiationManager(), this.delegatingConfig.mvcConversionService(), + this.delegatingConfig.mvcValidator()); ConfigurableWebBindingInitializer initializer = (ConfigurableWebBindingInitializer) adapter.getWebBindingInitializer(); @@ -128,6 +130,7 @@ public class DelegatingWebMvcConfigurationTests { public void configureMessageConverters(List> converters) { converters.add(stringConverter); } + @Override public void extendMessageConverters(List> converters) { converters.add(0, customConverter); @@ -136,7 +139,9 @@ public class DelegatingWebMvcConfigurationTests { delegatingConfig = new DelegatingWebMvcConfiguration(); delegatingConfig.setConfigurers(configurers); - RequestMappingHandlerAdapter adapter = delegatingConfig.requestMappingHandlerAdapter(); + RequestMappingHandlerAdapter adapter = delegatingConfig.requestMappingHandlerAdapter( + this.delegatingConfig.mvcContentNegotiationManager(), this.delegatingConfig.mvcConversionService(), + this.delegatingConfig.mvcValidator()); assertEquals("Only one custom converter should be registered", 2, adapter.getMessageConverters().size()); assertSame(customConverter, adapter.getMessageConverters().get(0)); assertSame(stringConverter, adapter.getMessageConverters().get(1)); @@ -165,7 +170,7 @@ public class DelegatingWebMvcConfigurationTests { @Test public void handlerExceptionResolver() throws Exception { delegatingConfig.setConfigurers(Collections.singletonList(webMvcConfigurer)); - delegatingConfig.handlerExceptionResolver(); + delegatingConfig.handlerExceptionResolver(delegatingConfig.mvcContentNegotiationManager()); verify(webMvcConfigurer).configureMessageConverters(converters.capture()); verify(webMvcConfigurer).configureContentNegotiation(contentNegotiationConfigurer.capture()); @@ -190,7 +195,8 @@ public class DelegatingWebMvcConfigurationTests { delegatingConfig.setConfigurers(configurers); HandlerExceptionResolverComposite composite = - (HandlerExceptionResolverComposite) delegatingConfig.handlerExceptionResolver(); + (HandlerExceptionResolverComposite) delegatingConfig + .handlerExceptionResolver(delegatingConfig.mvcContentNegotiationManager()); assertEquals("Only one custom converter is expected", 1, composite.getExceptionResolvers().size()); } @@ -211,7 +217,9 @@ public class DelegatingWebMvcConfigurationTests { }); delegatingConfig.setConfigurers(configurers); - RequestMappingHandlerMapping handlerMapping = delegatingConfig.requestMappingHandlerMapping(); + RequestMappingHandlerMapping handlerMapping = delegatingConfig.requestMappingHandlerMapping( + delegatingConfig.mvcContentNegotiationManager(), delegatingConfig.mvcConversionService(), + delegatingConfig.mvcResourceUrlProvider()); assertNotNull(handlerMapping); assertEquals("PathMatchConfigurer should configure RegisteredSuffixPatternMatch", true, handlerMapping.useRegisteredSuffixPatternMatch()); diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/config/annotation/WebMvcConfigurationSupportExtensionTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/config/annotation/WebMvcConfigurationSupportExtensionTests.java index 71b6617efc0..f037784ba68 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/config/annotation/WebMvcConfigurationSupportExtensionTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/config/annotation/WebMvcConfigurationSupportExtensionTests.java @@ -130,7 +130,9 @@ public class WebMvcConfigurationSupportExtensionTests { @Test public void handlerMappings() throws Exception { - RequestMappingHandlerMapping rmHandlerMapping = this.config.requestMappingHandlerMapping(); + RequestMappingHandlerMapping rmHandlerMapping = this.config.requestMappingHandlerMapping( + this.config.mvcContentNegotiationManager(), + this.config.mvcConversionService(), this.config.mvcResourceUrlProvider()); rmHandlerMapping.setApplicationContext(this.context); rmHandlerMapping.afterPropertiesSet(); assertEquals(TestPathHelper.class, rmHandlerMapping.getUrlPathHelper().getClass()); @@ -152,7 +154,9 @@ public class WebMvcConfigurationSupportExtensionTests { .getKey(); assertEquals(Collections.singleton("/api/user/{id}"), info.getPatternsCondition().getPatterns()); - AbstractHandlerMapping handlerMapping = (AbstractHandlerMapping) this.config.viewControllerHandlerMapping(); + AbstractHandlerMapping handlerMapping = (AbstractHandlerMapping) this.config.viewControllerHandlerMapping( + this.config.mvcPathMatcher(), this.config.mvcUrlPathHelper(), + this.config.mvcConversionService(), this.config.mvcResourceUrlProvider()); handlerMapping.setApplicationContext(this.context); assertNotNull(handlerMapping); assertEquals(1, handlerMapping.getOrder()); @@ -168,7 +172,10 @@ public class WebMvcConfigurationSupportExtensionTests { assertNotNull(chain); assertNotNull(chain.getHandler()); - handlerMapping = (AbstractHandlerMapping) this.config.resourceHandlerMapping(); + handlerMapping = (AbstractHandlerMapping) this.config.resourceHandlerMapping( + this.config.mvcUrlPathHelper(), this.config.mvcPathMatcher(), + this.config.mvcContentNegotiationManager(), this.config.mvcConversionService(), + this.config.mvcResourceUrlProvider()); handlerMapping.setApplicationContext(this.context); assertNotNull(handlerMapping); assertEquals(Integer.MAX_VALUE - 1, handlerMapping.getOrder()); @@ -195,7 +202,9 @@ public class WebMvcConfigurationSupportExtensionTests { @SuppressWarnings("unchecked") @Test public void requestMappingHandlerAdapter() throws Exception { - RequestMappingHandlerAdapter adapter = this.config.requestMappingHandlerAdapter(); + RequestMappingHandlerAdapter adapter = this.config.requestMappingHandlerAdapter( + this.config.mvcContentNegotiationManager(), this.config.mvcConversionService(), + this.config.mvcValidator()); // ConversionService String actual = this.config.mvcConversionService().convert(new TestBean(), String.class); @@ -215,11 +224,11 @@ public class WebMvcConfigurationSupportExtensionTests { // Custom argument resolvers and return value handlers List argResolvers = - (List) fieldAccessor.getPropertyValue("customArgumentResolvers"); + (List) fieldAccessor.getPropertyValue("customArgumentResolvers"); assertEquals(1, argResolvers.size()); List handlers = - (List) fieldAccessor.getPropertyValue("customReturnValueHandlers"); + (List) fieldAccessor.getPropertyValue("customReturnValueHandlers"); assertEquals(1, handlers.size()); // Async support options @@ -239,7 +248,9 @@ public class WebMvcConfigurationSupportExtensionTests { @Test public void webBindingInitializer() throws Exception { - RequestMappingHandlerAdapter adapter = this.config.requestMappingHandlerAdapter(); + RequestMappingHandlerAdapter adapter = this.config.requestMappingHandlerAdapter( + this.config.mvcContentNegotiationManager(), this.config.mvcConversionService(), + this.config.mvcValidator()); ConfigurableWebBindingInitializer initializer = (ConfigurableWebBindingInitializer) adapter.getWebBindingInitializer(); @@ -259,7 +270,9 @@ public class WebMvcConfigurationSupportExtensionTests { MockHttpServletRequest request = new MockHttpServletRequest("GET", "/foo.json"); NativeWebRequest webRequest = new ServletWebRequest(request); - RequestMappingHandlerMapping mapping = this.config.requestMappingHandlerMapping(); + RequestMappingHandlerMapping mapping = this.config.requestMappingHandlerMapping( + this.config.mvcContentNegotiationManager(), this.config.mvcConversionService(), + this.config.mvcResourceUrlProvider()); ContentNegotiationManager manager = mapping.getContentNegotiationManager(); assertEquals(Collections.singletonList(APPLICATION_JSON), manager.resolveMediaTypes(webRequest)); @@ -278,7 +291,10 @@ public class WebMvcConfigurationSupportExtensionTests { assertEquals(Collections.singletonList(APPLICATION_JSON), manager.resolveMediaTypes(webRequest)); request.setRequestURI("/resources/foo.gif"); - SimpleUrlHandlerMapping handlerMapping = (SimpleUrlHandlerMapping) this.config.resourceHandlerMapping(); + SimpleUrlHandlerMapping handlerMapping = (SimpleUrlHandlerMapping) this.config.resourceHandlerMapping( + this.config.mvcUrlPathHelper(), this.config.mvcPathMatcher(), + this.config.mvcContentNegotiationManager(), this.config.mvcConversionService(), + this.config.mvcResourceUrlProvider()); handlerMapping.setApplicationContext(this.context); HandlerExecutionChain chain = handlerMapping.getHandler(request); assertNotNull(chain); @@ -290,7 +306,7 @@ public class WebMvcConfigurationSupportExtensionTests { @Test public void exceptionResolvers() throws Exception { List resolvers = ((HandlerExceptionResolverComposite) - this.config.handlerExceptionResolver()).getExceptionResolvers(); + this.config.handlerExceptionResolver(null)).getExceptionResolvers(); assertEquals(2, resolvers.size()); assertEquals(ResponseStatusExceptionResolver.class, resolvers.get(0).getClass()); @@ -300,7 +316,8 @@ public class WebMvcConfigurationSupportExtensionTests { @SuppressWarnings("unchecked") @Test public void viewResolvers() throws Exception { - ViewResolverComposite viewResolver = (ViewResolverComposite) this.config.mvcViewResolver(); + ViewResolverComposite viewResolver = (ViewResolverComposite) this.config.mvcViewResolver( + this.config.mvcContentNegotiationManager()); assertEquals(Ordered.HIGHEST_PRECEDENCE, viewResolver.getOrder()); List viewResolvers = viewResolver.getViewResolvers(); @@ -310,12 +327,12 @@ public class WebMvcConfigurationSupportExtensionTests { assertFalse((Boolean) accessor.getPropertyValue("useNotAcceptableStatusCode")); assertNotNull(accessor.getPropertyValue("contentNegotiationManager")); - List defaultViews = (List)accessor.getPropertyValue("defaultViews"); + List defaultViews = (List) accessor.getPropertyValue("defaultViews"); assertNotNull(defaultViews); assertEquals(1, defaultViews.size()); assertEquals(MappingJackson2JsonView.class, defaultViews.get(0).getClass()); - viewResolvers = (List)accessor.getPropertyValue("viewResolvers"); + viewResolvers = (List) accessor.getPropertyValue("viewResolvers"); assertNotNull(viewResolvers); assertEquals(1, viewResolvers.size()); assertEquals(InternalResourceViewResolver.class, viewResolvers.get(0).getClass()); @@ -376,6 +393,7 @@ public class WebMvcConfigurationSupportExtensionTests { public void validate(@Nullable Object target, Errors errors) { errors.reject("invalid"); } + @Override public boolean supports(Class clazz) { return true; @@ -391,8 +409,10 @@ public class WebMvcConfigurationSupportExtensionTests { @Override public void configureAsyncSupport(AsyncSupportConfigurer configurer) { configurer.setDefaultTimeout(2500).setTaskExecutor(new ConcurrentTaskExecutor()) - .registerCallableInterceptors(new CallableProcessingInterceptor() { }) - .registerDeferredResultInterceptors(new DeferredResultProcessingInterceptor() {}); + .registerCallableInterceptors(new CallableProcessingInterceptor() { + }) + .registerDeferredResultInterceptors(new DeferredResultProcessingInterceptor() { + }); } @Override @@ -433,7 +453,7 @@ public class WebMvcConfigurationSupportExtensionTests { return new DefaultMessageCodesResolver() { @Override public String[] resolveMessageCodes(String errorCode, String objectName) { - return new String[] { "custom." + errorCode }; + return new String[] {"custom." + errorCode}; } }; } @@ -468,9 +488,11 @@ public class WebMvcConfigurationSupportExtensionTests { } - private class TestPathHelper extends UrlPathHelper {} + private class TestPathHelper extends UrlPathHelper { + } - private class TestPathMatcher extends AntPathMatcher {} + private class TestPathMatcher extends AntPathMatcher { + } @RestController