diff --git a/spring-web/src/test/java/org/springframework/http/codec/support/CodecConfigurerTests.java b/spring-web/src/test/java/org/springframework/http/codec/support/CodecConfigurerTests.java index 2e47b030f8..320ee4ea35 100644 --- a/spring-web/src/test/java/org/springframework/http/codec/support/CodecConfigurerTests.java +++ b/spring-web/src/test/java/org/springframework/http/codec/support/CodecConfigurerTests.java @@ -256,19 +256,6 @@ public class CodecConfigurerTests { .filter(e -> e == decoder).orElse(null)); } - @Test - public void protobufDecoderOverride() { - ProtobufDecoder decoder = new ProtobufDecoder(ExtensionRegistry.newInstance()); - this.configurer.defaultCodecs().protobufDecoder(decoder); - - assertSame(decoder, this.configurer.getReaders().stream() - .filter(writer -> writer instanceof DecoderHttpMessageReader) - .map(writer -> ((DecoderHttpMessageReader) writer).getDecoder()) - .filter(e -> ProtobufDecoder.class.equals(e.getClass())) - .findFirst() - .filter(e -> e == decoder).orElse(null)); - } - @Test public void jackson2EncoderOverride() { Jackson2JsonEncoder encoder = new Jackson2JsonEncoder(); @@ -283,7 +270,20 @@ public class CodecConfigurerTests { } @Test - public void protobufWriterOverride() { + public void protobufDecoderOverride() { + ProtobufDecoder decoder = new ProtobufDecoder(ExtensionRegistry.newInstance()); + this.configurer.defaultCodecs().protobufDecoder(decoder); + + assertSame(decoder, this.configurer.getReaders().stream() + .filter(writer -> writer instanceof DecoderHttpMessageReader) + .map(writer -> ((DecoderHttpMessageReader) writer).getDecoder()) + .filter(e -> ProtobufDecoder.class.equals(e.getClass())) + .findFirst() + .filter(e -> e == decoder).orElse(null)); + } + + @Test + public void protobufEncoderOverride() { ProtobufEncoder encoder = new ProtobufEncoder(); this.configurer.defaultCodecs().protobufEncoder(encoder); diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/config/WebFluxConfigurationSupport.java b/spring-webflux/src/main/java/org/springframework/web/reactive/config/WebFluxConfigurationSupport.java index d27e488924..3fa7a9cc57 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/config/WebFluxConfigurationSupport.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/config/WebFluxConfigurationSupport.java @@ -126,17 +126,14 @@ public class WebFluxConfigurationSupport implements ApplicationContextAware { mapping.setCorsConfigurations(getCorsConfigurations()); PathMatchConfigurer configurer = getPathMatchConfigurer(); - Boolean useTrailingSlashMatch = configurer.isUseTrailingSlashMatch(); if (useTrailingSlashMatch != null) { mapping.setUseTrailingSlashMatch(useTrailingSlashMatch); } - Boolean useCaseSensitiveMatch = configurer.isUseCaseSensitiveMatch(); if (useCaseSensitiveMatch != null) { mapping.setUseCaseSensitiveMatch(useCaseSensitiveMatch); } - Map>> pathPrefixes = configurer.getPathPrefixes(); if (pathPrefixes != null) { mapping.setPathPrefixes(pathPrefixes); @@ -331,6 +328,10 @@ public class WebFluxConfigurationSupport implements ApplicationContextAware { return initializer; } + /** + * Return a {@link FormattingConversionService} for use with annotated controllers. + *

See {@link #addFormatters} as an alternative to overriding this method. + */ @Bean public FormattingConversionService webFluxConversionService() { FormattingConversionService service = new DefaultFormattingConversionService(); @@ -339,7 +340,9 @@ public class WebFluxConfigurationSupport implements ApplicationContextAware { } /** - * Override to add custom {@link Converter}s and {@link Formatter Formatter}s. + * Override this method to add custom {@link Converter} and/or {@link Formatter} + * delegates to the common {@link FormattingConversionService}. + * @see #webFluxConversionService() */ protected void addFormatters(FormatterRegistry registry) { } 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 4e6b8daefe..9bf231f7d8 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 @@ -284,12 +284,10 @@ public class WebMvcConfigurationSupport implements ApplicationContextAware, Serv if (useSuffixPatternMatch != null) { mapping.setUseSuffixPatternMatch(useSuffixPatternMatch); } - Boolean useRegisteredSuffixPatternMatch = configurer.isUseRegisteredSuffixPatternMatch(); if (useRegisteredSuffixPatternMatch != null) { mapping.setUseRegisteredSuffixPatternMatch(useRegisteredSuffixPatternMatch); } - Boolean useTrailingSlashMatch = configurer.isUseTrailingSlashMatch(); if (useTrailingSlashMatch != null) { mapping.setUseTrailingSlashMatch(useTrailingSlashMatch); @@ -299,12 +297,10 @@ public class WebMvcConfigurationSupport implements ApplicationContextAware, Serv if (pathHelper != null) { mapping.setUrlPathHelper(pathHelper); } - PathMatcher pathMatcher = configurer.getPathMatcher(); if (pathMatcher != null) { mapping.setPathMatcher(pathMatcher); } - Map>> pathPrefixes = configurer.getPathPrefixes(); if (pathPrefixes != null) { mapping.setPathPrefixes(pathPrefixes); @@ -324,8 +320,8 @@ public class WebMvcConfigurationSupport implements ApplicationContextAware, Serv /** * Provide access to the shared handler interceptors used to configure - * {@link HandlerMapping} instances with. This method cannot be overridden, - * use {@link #addInterceptors(InterceptorRegistry)} instead. + * {@link HandlerMapping} instances with. + *

This method cannot be overridden; use {@link #addInterceptors} instead. */ protected final Object[] getInterceptors() { if (this.interceptors == null) { @@ -628,9 +624,8 @@ public class WebMvcConfigurationSupport implements ApplicationContextAware, Serv } /** - * Return a {@link FormattingConversionService} for use with annotated - * controller methods and the {@code spring:eval} JSP tag. - * Also see {@link #addFormatters} as an alternative to overriding this method. + * Return a {@link FormattingConversionService} for use with annotated controllers. + *

See {@link #addFormatters} as an alternative to overriding this method. */ @Bean public FormattingConversionService mvcConversionService() { @@ -640,8 +635,9 @@ public class WebMvcConfigurationSupport implements ApplicationContextAware, Serv } /** - * Override this method to add custom {@link Converter}s and - * {@link Formatter Converter}s and {@link Formatters}. + * Override this method to add custom {@link Converter} and/or {@link Formatter} + * delegates to the common {@link FormattingConversionService}. + * @see #mvcConversionService() */ protected void addFormatters(FormatterRegistry registry) { } @@ -686,9 +682,8 @@ public class WebMvcConfigurationSupport implements ApplicationContextAware, Serv /** * Provide access to the shared custom argument resolvers used by the - * {@link RequestMappingHandlerAdapter} and the - * {@link ExceptionHandlerExceptionResolver}. This method cannot be - * overridden, use {@link #addArgumentResolvers(List)} instead. + * {@link RequestMappingHandlerAdapter} and the {@link ExceptionHandlerExceptionResolver}. + *

This method cannot be overridden; use {@link #addArgumentResolvers} instead. * @since 4.3 */ protected final List getArgumentResolvers() { @@ -700,24 +695,21 @@ public class WebMvcConfigurationSupport implements ApplicationContextAware, Serv } /** - * Add custom {@link HandlerMethodArgumentResolver HandlerMethodArgumentResolvers} to use in addition to - * the ones registered by default. - *

Custom argument resolvers are invoked before built-in resolvers - * except for those that rely on the presence of annotations (e.g. - * {@code @RequestParameter}, {@code @PathVariable}, etc.). - * The latter can be customized by configuring the + * Add custom {@link HandlerMethodArgumentResolver HandlerMethodArgumentResolvers} + * to use in addition to the ones registered by default. + *

Custom argument resolvers are invoked before built-in resolvers except for + * those that rely on the presence of annotations (e.g. {@code @RequestParameter}, + * {@code @PathVariable}, etc). The latter can be customized by configuring the * {@link RequestMappingHandlerAdapter} directly. - * @param argumentResolvers the list of custom converters; - * initially an empty list. + * @param argumentResolvers the list of custom converters (initially an empty list) */ protected void addArgumentResolvers(List argumentResolvers) { } /** * Provide access to the shared return value handlers used by the - * {@link RequestMappingHandlerAdapter} and the - * {@link ExceptionHandlerExceptionResolver}. This method cannot be - * overridden, use {@link #addReturnValueHandlers(List)} instead. + * {@link RequestMappingHandlerAdapter} and the {@link ExceptionHandlerExceptionResolver}. + *

This method cannot be overridden; use {@link #addReturnValueHandlers} instead. * @since 4.3 */ protected final List getReturnValueHandlers() { @@ -729,27 +721,23 @@ public class WebMvcConfigurationSupport implements ApplicationContextAware, Serv } /** - * Add custom {@link HandlerMethodReturnValueHandler HandlerMethodReturnValueHandlers} in addition to the - * ones registered by default. - *

Custom return value handlers are invoked before built-in ones except - * for those that rely on the presence of annotations (e.g. - * {@code @ResponseBody}, {@code @ModelAttribute}, etc.). - * The latter can be customized by configuring the + * Add custom {@link HandlerMethodReturnValueHandler HandlerMethodReturnValueHandlers} + * in addition to the ones registered by default. + *

Custom return value handlers are invoked before built-in ones except for + * those that rely on the presence of annotations (e.g. {@code @ResponseBody}, + * {@code @ModelAttribute}, etc). The latter can be customized by configuring the * {@link RequestMappingHandlerAdapter} directly. - * @param returnValueHandlers the list of custom handlers; - * initially an empty list. + * @param returnValueHandlers the list of custom handlers (initially an empty list) */ protected void addReturnValueHandlers(List returnValueHandlers) { } /** - * Provides access to the shared {@link HttpMessageConverter HttpMessageConverters} used by the - * {@link RequestMappingHandlerAdapter} and the + * Provides access to the shared {@link HttpMessageConverter HttpMessageConverters} + * used by the {@link RequestMappingHandlerAdapter} and the * {@link ExceptionHandlerExceptionResolver}. - * This method cannot be overridden. - * Use {@link #configureMessageConverters(List)} instead. - * Also see {@link #addDefaultHttpMessageConverters(List)} that can be - * used to add default message converters. + *

This method cannot be overridden; use {@link #configureMessageConverters} instead. + * Also see {@link #addDefaultHttpMessageConverters} for adding default message converters. */ protected final List> getMessageConverters() { if (this.messageConverters == null) { @@ -764,24 +752,22 @@ public class WebMvcConfigurationSupport implements ApplicationContextAware, Serv } /** - * Override this method to add custom {@link HttpMessageConverter HttpMessageConverters} to use - * with the {@link RequestMappingHandlerAdapter} and the - * {@link ExceptionHandlerExceptionResolver}. Adding converters to the - * list turns off the default converters that would otherwise be registered - * by default. Also see {@link #addDefaultHttpMessageConverters(List)} that - * can be used to add default message converters. - * @param converters a list to add message converters to; - * initially an empty list. + * Override this method to add custom {@link HttpMessageConverter HttpMessageConverters} + * to use with the {@link RequestMappingHandlerAdapter} and the + * {@link ExceptionHandlerExceptionResolver}. + *

Adding converters to the list turns off the default converters that would + * otherwise be registered by default. Also see {@link #addDefaultHttpMessageConverters} + * for adding default message converters. + * @param converters a list to add message converters to (initially an empty list) */ protected void configureMessageConverters(List> converters) { } /** - * Override this method to extend or modify the list of converters after it - * has been configured. This may be useful for example to allow default - * converters to be registered and then insert a custom converter through - * this method. - * @param converters the list of configured converters to extend. + * Override this method to extend or modify the list of converters after it has + * been configured. This may be useful for example to allow default converters + * to be registered and then insert a custom converter through this method. + * @param converters the list of configured converters to extend * @since 4.1.3 */ protected void extendMessageConverters(List> converters) { @@ -789,7 +775,7 @@ public class WebMvcConfigurationSupport implements ApplicationContextAware, Serv /** * Adds a set of default HttpMessageConverter instances to the given list. - * Subclasses can call this method from {@link #configureMessageConverters(List)}. + * Subclasses can call this method from {@link #configureMessageConverters}. * @param messageConverters the list to add the default message converters to */ protected final void addDefaultHttpMessageConverters(List> messageConverters) { @@ -803,8 +789,8 @@ public class WebMvcConfigurationSupport implements ApplicationContextAware, Serv try { messageConverters.add(new SourceHttpMessageConverter<>()); } - catch (Error err) { - // Ignore when no TransformerFactory implementation is available + catch (Throwable ex) { + // Ignore when no TransformerFactory implementation is available... } messageConverters.add(new AllEncompassingFormHttpMessageConverter()); @@ -884,14 +870,12 @@ public class WebMvcConfigurationSupport implements ApplicationContextAware, Serv } /** - * Returns a {@link HandlerExceptionResolverComposite} containing a list - * of exception resolvers obtained either through - * {@link #configureHandlerExceptionResolvers(List)} or through - * {@link #addDefaultHandlerExceptionResolvers(List)}. - *

Note: This method cannot be made final due to CGLib - * constraints. Rather than overriding it, consider overriding - * {@link #configureHandlerExceptionResolvers(List)}, which allows - * providing a list of resolvers. + * Returns a {@link HandlerExceptionResolverComposite} containing a list of exception + * resolvers obtained either through {@link #configureHandlerExceptionResolvers} or + * through {@link #addDefaultHandlerExceptionResolvers}. + *

Note: This method cannot be made final due to CGLIB constraints. + * Rather than overriding it, consider overriding {@link #configureHandlerExceptionResolvers} + * which allows for providing a list of resolvers. */ @Bean public HandlerExceptionResolver handlerExceptionResolver() { @@ -909,21 +893,20 @@ public class WebMvcConfigurationSupport implements ApplicationContextAware, Serv /** * Override this method to configure the list of - * {@link HandlerExceptionResolver HandlerExceptionResolvers} to use. Adding resolvers to the list - * turns off the default resolvers that would otherwise be registered by - * default. Also see {@link #addDefaultHandlerExceptionResolvers(List)} + * {@link HandlerExceptionResolver HandlerExceptionResolvers} to use. + *

Adding resolvers to the list turns off the default resolvers that would otherwise + * be registered by default. Also see {@link #addDefaultHandlerExceptionResolvers} * that can be used to add the default exception resolvers. - * @param exceptionResolvers a list to add exception resolvers to; - * initially an empty list. + * @param exceptionResolvers a list to add exception resolvers to (initially an empty list) */ protected void configureHandlerExceptionResolvers(List exceptionResolvers) { } /** * Override this method to extend or modify the list of - * {@link HandlerExceptionResolver HandlerExceptionResolvers} 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. + * {@link HandlerExceptionResolver HandlerExceptionResolvers} 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 */ @@ -931,7 +914,8 @@ public class WebMvcConfigurationSupport implements ApplicationContextAware, Serv } /** - * A method available to subclasses for adding default {@link HandlerExceptionResolver HandlerExceptionResolvers}. + * A method available to subclasses for adding default + * {@link HandlerExceptionResolver HandlerExceptionResolvers}. *

Adds the following exception resolvers: *